0

POV-Ray でオブジェクトをある点から別の点に移動させる回転を見つけるのは驚くほど難しいと思います。

幾何学的に見つけるのは簡単です。Dist原点からターゲット ポイントPointT(緑) までの距離を計算し、(青) で作成Point0します<Dist, 0, 0>Point0次に、それらの間の角度とPointTそれらへの垂線を計算します。AngleD周りの回転は=にPerp移動Point0します。Point1PointT

POV-Ray ではvaxis_rotate、 を計算するために使用できますPoint1。しかし、実際にオブジェクトを回転させたいのですが (もちろん、これは球体ではありません)、これを行う明確な方法がわかりません。を試してみrotate -AngleD*Perpましたが、少し異なる結果 (赤) が得られます。

オブジェクトに対してどのようにすればよいvaxis_rotateですか?

#declare PointT = <2, 2, 2>;

#declare Dist = VDist(<0, 0, 0>, PointT);
#declare Point0 = <Dist, 0, 0>;
#declare AngleD = VAngleD(PointT, Point0);
#declare Perp = VPerp_To_Plane(PointT, Point0);
#declare Point1 = vaxis_rotate(Point0, Perp, -AngleD);

sphere{Point0, R   pigment{color Blue}  }
sphere{Point1, R   pigment{color Green}  }

sphere{
    Point0, R
    rotate -AngleD*Perp
    pigment{color Red}
}

ここに画像の説明を入力

4

3 に答える 3

0

transforms.inc で Axis_Rotate_Trans を探します。

#include "transforms.inc" 

sphere {
  ..., ...
  Axis_Rotate_Trans(
    VPerp_To_Plane(<...>, <...>), 
    VAngleD(<...>, <...>)
  )
}
于 2018-11-29T21:58:56.233 に答える