我正在使用一个可视化分子的程序。分子由每个原子的多个 x、y 和 z 值表示。我想做的是对每个坐标进行一些数学运算,并让生成的分子在其中一个轴上旋转。我试过使用这些公式:
y' = y*cos q - z*sin q
z' = y*sin q + z*cos q
x' = x
以及对应的 Y 轴和 Z 轴。在 180 度的旋转中,生成的分子看起来很好,但似乎是对映体(镜像)。任何其他角度(360 度除外)都会使分子彼此倾斜。
我所希望的是所有原子都会“一起”旋转。如果重要的话,我正在使用 Java。
谢谢您的帮助
编辑代码
if (axis == 'X') {
// y' = y*cos q - z*sin q
// z' = y*sin q + z*cos q
// x' = x
y = y * Math.cos(radians) - z * Math.sin(radians);
z = y * Math.sin(radians) + z * Math.cos(radians);
}
else if(axis == 'Y'){
//z' = z*cos q - x*sin q
//x' = z*sin q + x*cos q
//y' = y
z = z * Math.cos(radians) - x * Math.sin(radians);
x = z * Math.sin(radians) + x * Math.cos(radians);
}
else if(axis == 'Z'){
//x' = x*cos q - y*sin q
//y' = x*sin q + y*cos q
//z' = z
x = x * Math.cos(radians) - y * Math.sin(radians);
y = x * Math.sin(radians) + y * Math.cos(radians);
}
编辑 2. 发现错误。我正在正确计算第一个坐标值,并分配它。当我尝试计算第二个坐标时,我更改了第一个坐标,因此第二个坐标的值错误。我很抱歉给您带来麻烦