vtk中矩阵使用

这段代码展示了如何通过矩阵变换和四元数来操作3D空间中的向量,包括向量的归一化、旋转、缩放和平移。首先计算向量的单位化,然后构造旋转矩阵,接着进行位移和缩放操作,最后将变换应用于vtkActor,用于3D渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 矩阵变换可以实现位移与旋转,四元数的经典使用,向量可以写成矩阵的形式,左乘后相当于将当前向量进行位移缩放旋转。
\begin{bmatrix} normalizedX[0]&normalizedY[0] &normalizedZ[0] \\ normalizedX[1]&normalizedY[1] &normalizedZ[1] \\ normalizedX[2]&normalizedY[2] &normalizedZ[2] \end{bmatrix}

第一列代表对应x轴(1,0,0)当然实际结果肯定不是只是相当于。

第二列代表对应Y轴(0,1,0)

第三列代表对应Z轴(0,0,1)

double[] normalizedX = new double[3];
            double[] normalizedY = new double[3];
            double[] normalizedZ = new double[3];
            myMath.Subtract(endPoint, startPoint, ref normalizedX);
            double length = myMath.Norm(normalizedX);
            myMath.Normalize(ref normalizedX);
            double[] arbitrary = new double[] {
                vtkMath.Random(-10,10),
                vtkMath.Random(-10,10),
                vtkMath.Random(-10,10)
            };
            myMath.Cross(normalizedX, arbitrary, ref normalizedZ);
            myMath.Normalize(ref normalizedZ);
            myMath.Cross(normalizedZ, normalizedX, ref normalizedY);
            vtkMatrix4x4 matrix = vtkMatrix4x4.New();
            matrix.Identity();
            for(int i=0;i<3;i++)
            {
                matrix.SetElement(i, 0, normalizedX[i]);
                matrix.SetElement(i, 1, normalizedY[i]);
                matrix.SetElement(i, 2, normalizedZ[i]);

            }
            vtkTransform transform = vtkTransform.New();
            transform.Translate(startPoint[0], startPoint[1], startPoint[2]);
            transform.Concatenate(matrix);
            transform.Scale(length, length, length);
            vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
            vtkActor actor = vtkActor.New();
            mapper.SetInputConnection(arrowSource.GetOutputPort());
            actor.SetUserMatrix(transform.GetMatrix());
            actor.SetMapper(mapper);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值