如何在vtklinewidget中进行转换

问题描述 投票:0回答:1

我正在尝试使用传感器坐标和方向角画一条线。线的一端是传感器当前位置,我想找到与当前点具有相同方向的另一端。为了实现这一点,我创建了一个旋转矩阵并将其与我想要旋转的点相乘。

当线处于 (0, 90, 0) 位置时,线旋转是正确的。但是当线在z轴上倾斜和旋转时,顶部当前点似乎在一定高度上围绕当前点旋转。我该如何解决这个问题?

这是我使用的代码。

  double currentpoint[3];
    currentpoint[0] = sphere_x;
    currentpoint[1] = sphere_y;
    currentpoint[2] = sphere_z;

    double topCurrentpoint[3];
    topCurrentpoint[0] = sphere_x;
    topCurrentpoint[1] = sphere_y;
    topCurrentpoint[2] = sphere_z + (110 * scale_z);

    vtkSmartPointer<vtkTransform> needleTransform_init = vtkSmartPointer<vtkTransform>::New();
    needleTransform_init->Translate(currentpoint[0], currentpoint[1], currentpoint[2]);
    needleTransform_init->RotateX(90);
    needleTransform_init->Translate(-currentpoint[0], -currentpoint[1], -currentpoint[2]);
    needleTransform_init->TransformPoint(topCurrentpoint, topCurrentpoint);

    qDebug()<<" angles before rea"<<roll<<elevation<<azimuth;
    vtkSmartPointer<vtkTransform> needleTransform = vtkSmartPointer<vtkTransform>::New();
    needleTransform->Translate(currentpoint[0], currentpoint[1], currentpoint[2]);
    needleTransform->RotateZ(180+roll); // (180+roll)
    needleTransform->RotateX(elevation); // (elevation)
    needleTransform->RotateY(180-azimuth); // (180-azimuth)
    needleTransform->Translate(-currentpoint[0], -currentpoint[1], -currentpoint[2]);
    needleTransform->TransformPoint(topCurrentpoint, topCurrentpoint);

    vtkNew<vtkLineSource> lineSource;
    lineSource->SetPoint1(currentpoint);
    lineSource->SetPoint2(topCurrentpoint);
c++ 3d transformation vtk euler-angles
1个回答
0
投票

正是 180 滚转和 180 方位角造成了错误。

needleTransform->RotateZ(azimuth); 
needleTransform->RotateX(elevation); 
needleTransform->RotateY(roll); 

这就是答案。

© www.soinside.com 2019 - 2024. All rights reserved.