当前位置: 首页 > news >正文

[VTK] 四元素实现旋转平移

VTK 实现旋转,有四元数的方案,也有 vtkTransform 的方案;主要示例代码如下:

    //构造旋转四元数
    vtkQuaterniond rotation;
    rotation.SetRotationAngleAndAxis(vtkMath::RadiansFromDegrees(90.0),0.0, 1.0, 0.0);
    
    //构造旋转点四元数
    vtkQuaterniond p;
    p.Set(0.0,1.0,0.0,0.0);
    
    //转置
    vtkQuaterniond inverse = rotation.Inverse();
    
    //计算旋转结果
    vtkQuaterniond res = rotation*p*inverse;
    double resdata[4] = {0};
    res.Get(resdata);
vtkSmartPointer<vtkTransform> trans = vtkSmartPointer<vtkTransform>::New();
trans->PostMultiply();
trans->Translate(1, 0, 0);
trans->RotateZ(45);
import math
import numpy as np
import vtk


def radians_to_degrees(radians):
    return radians * (180.0 / math.pi)


def degrees_to_radians(degree):
    return degree / 180.0 * math.pi

# 示例使用
radians = 1.0
degrees = radians_to_degrees(radians)

polyline_pts = [[math.sin(degrees_to_radians(60)), math.cos(degrees_to_radians(60)), 0],
                [math.sin(degrees_to_radians(30)), math.cos(degrees_to_radians(30)), 0.0]]

t = np.cross(np.array(polyline_pts[0]), np.array(polyline_pts[1]))
print(t)

print(polyline_pts[0])

# 创建点
points = vtk.vtkPoints()
points.InsertNextPoint(0, 0, 0)
points.InsertNextPoint(1, 0, 0)
points.InsertNextPoint(1, 1, 0)
points.InsertNextPoint(0, 1, 0)

# 创建单元数组
lines = vtk.vtkCellArray()
lines.InsertNextCell(4)
lines.InsertCellPoint(0)
lines.InsertCellPoint(1)
lines.InsertCellPoint(2)
lines.InsertCellPoint(3)

# 创建多边形数据
polydata = vtk.vtkPolyData()
polydata.SetPoints(points)
polydata.SetLines(lines)

# 创建映射器
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(polydata)

# 创建actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# 创建渲染器、渲染窗口和渲染窗口交互器
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

# 添加actor到渲染器并进行渲染
renderer.AddActor(actor)
renderer.SetBackground(0, 0, 0)
renderWindow.SetSize(640, 480)
renderWindow.Render()
renderWindowInteractor.Start()

相关文章:

  • 2025年危化品安全员考试题库及答案
  • Java基础:浅析Java中的XML文件处理
  • JavaScript 中的 if (object) 语句解释
  • Java基础:集合List、Map、Set(超详细版)
  • 电子处方+在线问诊系统源码:打造智能诊疗闭环“黄金搭档”方案
  • KingbaseES JSON全解析:记录操作与高级表格处理
  • 机器学习 第一章
  • SSM废品买卖回收管理系统的设计与实现
  • Java中的wait( )和sleep( )方法的区别
  • AI大模型技术之RAG、模型微调、知识蒸馏
  • 从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)
  • 【langchain4j系列教程-05】一文读懂:人工智能如何实现会话记忆
  • 基于EfficientNet的自闭症诊断辅助系统揭秘
  • Maven工具学习使用(十)——生成项目站点
  • Python及C++中的字典
  • 【玩泰山派】5、点灯,驱动led-(2)ubuntu18.04 升级python3.6到python3.7,安装pip3
  • 20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常出现的list-iodomain.sh警告信息
  • 58-使用wordpress快速创建个人网站
  • Go小技巧易错点100例(二十六)
  • SpringBoot项目:部门管理系统
  • 做策划的网站推广/免费域名申请的方法
  • 郑州同济医院口碑怎样/郑州优化公司有哪些
  • 网站建设的风格设置/化妆品推广软文
  • 郑州公司企业网站建设/百度推广查询
  • 门户网站模板源码/seo运营是什么意思
  • 网站建设备案费用/seo教程百度网盘