我目前正试图使用ParaView计算器 - 滤波器将给定的笛卡尔坐标(x,y,z)转换为球坐标(r,theta,phi),其中theta是极角,phi是方位角。 我想做一个四分之一领域的领域:
([r_inn,r_out]中的r,[0,pi]中的theta,[0,2pi]中的phi。
到目前为止,我定义了以下给出预期结果的结果变量:
r = sqrt(coordsX ^ 2 + coordsY ^ 2 + coordsZ ^ 2)
theta = acos(coordsZ / r)
对于方位角矢量,我意识到在使用时我必须处理(x,y)的象限
phi = atan(y / x)。
这通常是使用C中的atan2之类的额外函数来实现的。这样的函数似乎不是由计算器过滤器或Python计算器过滤器提供的。
有没有简单的方法来使用图形界面实现像atan2这样的东西?
非常感谢任何评论,谢谢!
更新:
在Neil Twist指出之后,在Python计算器中,反正切函数可以被称为arctan2(y,x),我现在面临的问题是我无法访问a的坐标单元格通过变量coordsX / Y / Z,可以在简单的计算器过滤器中找到。
现在,问题是:如何在Python计算器中访问单元格坐标?
答案 0 :(得分:2)
您可以在ParaView中使用Python计算器的numpy扩展,但是numpy已经调用了函数arctan2而不是atan2。
有trigonometric functions的numpy文档,但令人烦恼的是你无法直接使用所有函数,例如你可以arctan2(x1, x2)
,但是你不能pi
使用numpy.pi
。
对于上下文,也有PythonCalculator个文档。
要访问coordsX和coordsY有点棘手,但可以使用points
变量来实现。这实际上是所有点的数组,每个点都是x,y和z坐标数组。
要使用坐标,您需要像这样提取它们:
[point[0] for point in points]
[point[1] for point in points]
[point[2] for point in points]
因此,要使用带有Y和X坐标的arctan函数,您可以执行以下操作:
arctan2([point[1] for point in points], [point[0] for point in points])
<强>更新强> 经过一番调查后,可能会有更好的方法来获得coordsX / Y / Z:
points[:,0]
points[:,1]
points[:,2]
给
arctan2(points[:,1], points[:,0])
另一个有用的参考是numpy_interface algorithms。