首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用magpylib在3d空间中旋转载流导线?

如何使用magpylib在3d空间中旋转载流导线?
EN

Stack Overflow用户
提问于 2021-09-26 20:31:18
回答 1查看 67关注 0票数 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)]

这就是我现在的立场:

代码语言:javascript
运行
复制
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)]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-26 22:33:17

它怎麽工作?

它不应该改变,尽管有点不直观,但它的工作原理是这样的:moverotate方法调用不影响vertices,但适用于positionorientation

代码语言:javascript
运行
复制
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.]

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

不管怎样,我们怎样才能做到这一点呢?

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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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]]

我不知道这个包如何在同时移动和旋转的情况下工作,问题也不是关于它的,所以我希望现在就足够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69338727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档