对数据进行排序以绘制圆

对数据进行排序以绘制圆

这里我有一个数据我将使用 Gnuplot 绘制线条。使用代码

pl 'Sphere_ISOTEST_data.txt' w p

我得到下图

这

但是,使用

pl 'Sphere_ISOTEST_data.txt' w l

我得到以下信息:

在此输入图像描述

任何人都可以建议如何对数据进行排序,以便我可以绘制w l并仅获取圆的周长。

答案1

这可以通过以下方式解决将笛卡尔坐标转换为极坐标并按角度排序。

我们可以将角度计算为atan2(y,x)

我们可以使用这个计算出的数字对原始数据进行排序,方法是应用施瓦茨变换其中角度用作临时排序键:

awk -v OFS='\t' '{ print atan2($2,$1), $0 }' Sphere_ISOTEST_data.txt |
LC_ALL=C sort -g | cut -f 2-  >sorted.txt

awk程序atan2()根据文件中的值计算值,并使用制表符作为分隔符,在每行的原始行前面添加该值。然后,该sort实用程序对数据进行排序,并cut用于删除临时排序键。

请注意,我使用的sort -g是非标准的。该-g选项在实现时通常会启用“通用数字排序”,我们需要使用它,因为某些atan2()值由于非常小而采用科学记数法。我们还需要使用 POSIX 语言环境 (" C") 来sort正确读取和排序数字。显然,我们可以通过在打印值时修改值的输出格式来解决这个问题atan2(),但这至少显示了总体思路。

结果写入到sorted.txt.

结果图

GNUTERM=png gnuplot -e 'set size square; pl "sorted.txt" w l' >sorted.png

相关内容