相关疑难解决方法(0)

通过四元数旋转坐标系

我们有一个巨大的空间坐标(x,y和z)代表3d空间中的原子,我正在构建一个将这些点转换为新坐标系的函数.将坐标移动到任意原点很简单,但我无法绕过下一步:3d点旋转计算.换句话说,我试图将点从(x,y,z)转换为(x',y',z'),其中x',y'和z'是i',j'和k',我在euclid python模块的帮助下制作的新轴向量.

认为我需要的只是一个欧几里德四元数来做到这一点,即

>>> q * Vector3(x, y, z)
Vector3(x', y', z')
Run Code Online (Sandbox Code Playgroud)

但是为了使我相信我需要一个旋转轴向量和一个旋转角度.但我不知道如何从i',j'和k'计算这些.这似乎是一个从头开始编码的简单程序,但我怀疑这样的东西需要线性代数来自行解决.非常感谢你在正确的方向上轻推.

python math

33
推荐指数
2
解决办法
4万
查看次数

在Python中实现3D向量:numpy vs x,y,z字段

我正在用Python实现3D Vector类.我的向量有坐标x,y和z(所有浮点数),我需要决定如何存储这些信息.我在这里至少可以看到三个选项:

1)制作三个独立的浮点字段:self.x,self.y,self.z

class Vector:

  def __init__(self, x, y, z):
    self.x = x
    self.y = y
    self.z = z
Run Code Online (Sandbox Code Playgroud)

2)制作一个列表,比如说self.data,有三个元素.如果对象可以是常量,我也可以使用元组.

class Vector:

  def __init__(self, x, y, z):
    self.data = [x,y,z]
Run Code Online (Sandbox Code Playgroud)

3)制作一个numpy数组,比如self.data,有三个元素.

import numpy as np    

class Vector:

  def __init__(self, x, y, z):
    self.data = np.array([x,y,z])
Run Code Online (Sandbox Code Playgroud)

对于选项(2)和(3),我可以实现属性和设置器来访问单个坐标

@property
def x(self):
  return self.data[0]
Run Code Online (Sandbox Code Playgroud)

4)为什么不进行冗余?我可以同时拥有一个列表(或元组或numpy数组)和单独的字段x,y和z.

该类用于执行常见操作,例如向量添加,内积,叉积,旋转等.需要考虑这些操作的性能.

是否有我更喜欢的解决方案,为什么?

python arrays numpy class vector

6
推荐指数
1
解决办法
6345
查看次数

标签 统计

python ×2

arrays ×1

class ×1

math ×1

numpy ×1

vector ×1