2

我使用 python 的 Magpylib 库进行磁场计算。

我创建了一个带顶点的电流导线:[(0,0,0)(1,0,0)]

现在我试图以这样一种方式旋转它,它的新顶点将是: [(0,0,0),(0,1,0)],[(0,0,0)(-1,0,0)],[(0,0,0)(0,-1,0)]

这是我目前的立场:

wire=mag3.current.Line(current=10,vertices=[(0,0,0),(1,0,0)],position=(0,0,0))
print(wire.vertices)
wire=wire.rotate(R.from_euler('z',90, degrees=True),anchor=(0,0,0),increment=True)
print(wire.vertices)

我越来越:

[(0,0,0)(1,0,0)],[(0,0,0)(1,0,0)]

虽然我正在寻找:[(0,0,0)(1,0,0)],[(0,0,0)(0,1,0)]

4

1 回答 1

1

它是如何工作的?

它不应该改变,即使它有点不直观,但就像那样工作:move并且rotate方法调用不会影响vertices, 但适用于positionandorientation

import magpylib as mag3
from scipy.spatial.transform import Rotation as R

wire = mag3.current.Line(current=10, vertices=[(0, 0, 0), (1, 0, 0)])
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]
print(wire.position)
# [0. 0. 0.]
print(wire.orientation.as_euler('xyz', degrees=True))
# [0. 0. 0.]

wire.move((1, 2, 3))
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]
print(wire.position)
# [1. 2. 3.]
print(wire.orientation.as_euler('xyz', degrees=True))
# [0. 0. 0.]

wire.rotate(R.from_euler('z', 45, degrees=True))
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]
print(wire.position)
# [1. 2. 3.]
print(wire.orientation.as_euler('xyz', degrees=True))
# [ 0.  0. 45.]

所有这些都是针对没有任何verticeslike的对象Sphere,你看,除了简单地将其存储为单独的值之外,没有办法定义球体旋转。(为什么我们要存储球体的旋转是另一个问题:])

无论如何,我们怎样才能做到这一点?

但是如果你想看到旋转对顶点的影响,你可以这样做wire.orientation.apply(wire.vertices)

import magpylib as mag3
from scipy.spatial.transform import Rotation as R

wire = mag3.current.Line(current=10, vertices=[(0, 0, 0), (1, 0, 0)])

wire.rotate(R.from_euler('z', 45, degrees=True))
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]
print(wire.orientation.apply(wire.vertices))
# [[0.         0.         0.        ]
#  [0.70710678 0.70710678 0.        ]]
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]

如果你想换班,那就用wire.vertices + wire.position

import magpylib as mag3
from scipy.spatial.transform import Rotation as R

wire = mag3.current.Line(current=10, vertices=[(0, 0, 0), (1, 0, 0)])

wire.move((1, 2, 3))
wire.move((4, 3, 2))
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]
print(wire.vertices + wire.position)
# [[5. 5. 5.]
#  [6. 5. 5.]]
print(wire.vertices)
# [[0 0 0]
#  [1 0 0]]

我不知道这个包如何与同时移位和旋转一起工作,问题不在于它,所以我希望现在就足够了。

于 2021-09-26T22:33:16.690 回答