2017-09-25 3 views
0

편집 1 : 문구가 다시 나오는 질문.
2 개의 좌표 종축 A와 B와 점 Pt가 있습니다. 프레임 A는 기본 프레임입니다. 프레임 B는 프레임 A에 대해 약간의 이동 및 회전을합니다. 점 Pt는 프레임 B에서 고정됩니다.
반복마다 반복 프레임 B는 프레임 A의 Z 축을 따라 "DEG"각도만큼 회전합니다. 각 회전 후에 점 Pt wrt의 좌표를 프레임 A에 비교하고 싶습니다.고유 : 좌표가있는 좌표 A의 점 좌표 (좌표 B 축)

이것은 수직 막대의 측면에 붙어있는 공과 비슷합니다. 로드가 z 축과 볼과 함께 회전합니다. 여기 막대는 프레임 A이고 공은 프레임 B입니다.

저는 이것을 위해 Eigen을 사용했고 변수에 매핑 된 A - B의 정적 변환을 사용했습니다.

내가 제대로 질문을 받았다면
// the frame A - Frame B translation and Rotation 
Eigen::Vector3f trans = Eigen::Vector3f(xt,yt,zt); 
Eigen::Quaternionf quat = Eigen::Quaternionf (xr,yr,zr,wr); 
quat.normalize(); 
Eigen::Transform<float,3,Eigen::Affine> static_transform = Eigen::Translation<float,3>(trans) * quat; 
// this the point in the frame A 
Eigen::Vector3f newPoint (xp,yp,zp); 
+0

나는 완전히 당신의 질문을 이해 생각하지 않는다 : 2 개의 좌표 프레임 또는 반복마다 2 개의 좌표 프레임을 가지고 있습니까 (아니면 'A'변경 만 프레임합니까?)? 그리고 'A'가 무엇을 기준으로 회전합니까? 또한 'B'또는 모든 첫 번째 'B'에 'Pt'가 고정되어 있습니까? 'Pt'가 'B'로 고정되고 'B'가 'A'로 고정되면 'Pt'는 'A'로 고정됩니다. – chtz

답변

0

, 다음이 귀결 :

Vector3f p_in_B(...); 
while(...) { 
    // update static_transform 
    Vector3f p_in_A = static_transform * p_in_B; 
} 

마지막 제품이 동등에 :

p_in_A = static_transform.linear() * p_in_B + static_transform.translation(); 
+0

거의 제대로 됐습니다. 따라서 A의 Point Pt는 A = (A-B로부터 A-B 로의 변환에서) 회전의 "DEG"* (B에서의 pt)에있는 pt이어야합니다. 이 구문에 대한 올바른 구문을 이해할 수 없습니다. – surajmshanbhag

+0

그래서 아래 코드를 사용하여 x, y 좌표를 얻습니다. 그러나 모든 3D 점들은 z = 0 인 하나의 평면으로 찌그러진다. 'Eigen :: Quaternion quat; quat = Eigen :: AngleAxis (DEG, Eigen :: Vector3f (0, 0, 1)); Eigen :: Transform t = static_quat * Eigen :: 번역 (번역) * current_angular_quat; Eigen :: Vector3f newPoint (Pt_x, Pt_y, Pt_z); newPoint = t * newPoint; ' – surajmshanbhag

+0

각도는 반드시 빛나야합니다. – ggael