2016-11-17 1 views
2

Here is a little image 내 현재 상태입니다. 지금 나는 앞에 빨간 벡터를 중심으로 원을 그려보고자합니다. 그리고 원은 파란색 벡터를 만져야합니다. 하지만 매개 변수를 직접 조정할 수 있습니다 (물론 다른 서클도 있습니다).3D 공간에서 회전 된 원을 그립니다.

그럼 내가 원하는 것은 일반적인 방법입니다 임의의 축 주위를 회전 한 3D 공간에서 임의의 중심점을 가진 원을 그립니다..

아래 코드는 현재 초안입니다. 임의의 중심점을 중심으로 수평선을 그리지 만 회전 부분은 여전히 ​​누락되어 있습니다.

set parametric 
set urange [0:pi/2] 
set vrange [0:2*pi] 
[..] 
# radius 
r = 0.1 
# center (d,e,k) 
d = 0.1 
e = 0.2 
k = 0.3 
fTx(u,v) = d+r*cos(v) 
fTy(u,v) = e+r*sin(v) 
fTz(u,v) = k   

splot [..] ,\ 
     fTx(u,v), fTy(u,v), fTz(u,v) 

답변

4

rotation matrices을 사용하여 원의 포인트를 회전 할 수 있습니다. X 축에 대한 각도 th하여 회전시키는 예를 들어, 점 (fTx, fTy, fTz)Rx(th) 승산된다 : 다음

  (1  0   0 ) 
Rx(th) = (0 cos(th) -sin(th)) 
     (0 sin(th) cos(th)) 

일 = 24 °로 회전하여 GNUPLOT 스크립트는 확장 될 수있다 :

th = 24.0*pi/180 
rotx(u,v) = fTx(u,v) 
roty(u,v) = cos(th)*fTy(u,v) - sin(th)*fTz(u,v) 
rotz(u,v) = sin(th)*fTy(u,v) + cos(th)*fTz(u,v) 

splot rotx(u,v), roty(u,v), rotz(u,v) 

다른 축을 중심으로 회전하는 것은 간단합니다. 주제에 대해 다시 생각

, (d, e, k)에 회전 원을 이동하기 전에 먼저 회전하는 것이 더 쉬울 수 있습니다 처음에는

set parametric 
set urange [0:pi/2] 
set vrange [0:2*pi] 
# radius 
r = 0.1 
# center (d,e,k) 
d = 0.1 
e = 0.2 
k = 0.3 
# rotation angles (th, ..) 
th = 24.0*pi/180.0 

fTx(u,v) = r*cos(v) 
fTy(u,v) = r*sin(v) 
fTz(u,v) = 0  

rotx(u,v) = fTx(u,v) 
roty(u,v) = cos(th)*fTy(u,v) - sin(th)*fTz(u,v) 
rotz(u,v) = sin(th)*fTy(u,v) + cos(th)*fTz(u,v) 

movx(u,v) = d + rotx(u, v) 
movy(u,v) = e + roty(u, v) 
movz(u,v) = k + rotz(u, v) 

splot movx(u,v), movy(u,v), movz(u,v) 
+0

대단히 감사합니다! 그것은 거의 완벽하게 작동하고 수학은 마술 블랙 박스가 아닙니다 :) 저의 유일한 관심사는 x 축과 y 축이 전환 된 것처럼 보입니다. 귀하의 코드는 y 축 (https://i.imgur.com/FVM9XXM.png) 주위를 회전시키고 y 행렬은 x 주위로 회전을 제공합니다. (z 축은 예상대로 작동 함). 이것이 어디에서 왔을 수있는 아이디어가 있습니까? – PeteParly

+0

아니요, 잘 모르겠습니다. 그러나 나는 그다지 신경 쓰지 않을 것이다. 나는 단지 행렬 또는 행렬의 조합을 취할 것이다. 어쩌면 저 또는 당신 또는 gnuplot 또는 wikipedia 중 하나가 x와 y의 다른 정의를 가질 수 있습니다. 또는 우리 모두 : – maij

+0

당신은 요점이 있습니다. 답을 수락하고 다시 한 번 감사드립니다! – PeteParly