ParaView 计算器 atan2

ParaView Calculator atan2

我目前正在尝试使用 ParaView 计算器过滤器将给定的笛卡尔坐标 (x,y,z) 转换为球面坐标 (r, theta, phi),其中 theta 是极角,phi 是方位角. 我想在四分之一球体的域上执行此操作:

(r in [r_inn, r_out], theta in [0, pi], phi in [0, 2pi].

到目前为止,我定义了以下给出预期结果的结果变量:

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),我现在面临无法访问坐标的问题通过简单计算器过滤器中可用的变量 coordsX/Y/Z 计算单元格。

现在,问题是:如何在 Python 计算器中访问单元格坐标?

您可以在 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.