- 浏览: 849886 次
- 性别:
- 来自: 南京
-
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
在连接矿体的过程中,如果矿体线不是规则的多边形,即矿体线本身不在一个平面上,那么在连接两个矿体线成为矿体的时候,容易出现奇异情况,比如出现椎体等,这个时候,就需要对矿体线做预处理,这里采用投影来规整矿体线。
投影点集合时,首先需要确定投影到哪个平面,以及这个平面如何表示。对于第一个问题,尽量选择与矿体线接近的那个平面,这样投影之后,不至于会出现矿体线自相交的情况。第二个问题,在vtk中表示一个平面可以使用vtkPlane来表示,vtkPlane确定一个平面需要两个参数,平面的原点以及法向量。如下代码设置:
vtkPlane plane = new vtkPlane(); plane.SetOrigin(0,0,0); plane.SetNormal(direct);
然后,就是在vtk中如何进行投影。vtkPlane自身提供了一个函数:ProjectPoint(double p[],double proj[]),这个函数是将一个点投影到某个平面,那么针对一个点集合时,可以分别针对每个点进行投影操作即可。关键代码如下:
public vtkPoints projectPoints(vtkPoints pt0,double direct[]){ vtkPlane plane = new vtkPlane(); plane.SetOrigin(0,0,0); plane.SetNormal(direct); vtkPoints newPts = new vtkPoints(); double proj[] = new double[3]; for(int i=0;i<pt0.GetNumberOfPoints();i++){ double p[] = pt0.GetPoint(i); plane.ProjectPoint(p, proj); newPts.InsertNextPoint(proj); } return newPts; }
上面方法的作用就是将一个点集合投影到由点(0,0,0)和法向量direct确定的平面上。
在下面的示例中,演示的是将一个折线投影到经过(0,0,0)且垂直于屏幕的平面上:
/** * 将一系列点集合投影到一个平面上 * * @author dev * @version 1.0, 2012-3-13] */ public class ProjectPointsToPlane extends VtkBase { private vtkPoints pt0; private vtkActor polylineactor ; public static void main(String[] args) { ProjectPointsToPlane pptp = new ProjectPointsToPlane(); pptp.build(); } public void build(){ vtkPolyData data = readPolyData("E:\\works\\java\\VtkDemo\\src\\data\\vmine-spec.vtk"); data.SetVerts(null); pt0 = OreUtil.filterRepeatPoints(data,data.GetCell(0).GetPointIds()); vtkPolyData polyline = buildClosedPolyLine(pt0); polylineactor = makeActor(polyline); renderer.AddActor(polylineactor); renderWindow.LineSmoothingOn(); postInit(); } //将给定的点击pt0投影到平面 public vtkPoints projectPoints(vtkPoints pt0,double direct[]){ vtkPlane plane = new vtkPlane(); plane.SetOrigin(0,0,0); plane.SetNormal(direct); vtkPoints newPts = new vtkPoints(); double proj[] = new double[3]; for(int i=0;i<pt0.GetNumberOfPoints();i++){ double p[] = pt0.GetPoint(i); plane.ProjectPoint(p, proj); newPts.InsertNextPoint(proj); } return newPts; } @Override public void OnRightButtonDown() { //取得相机的投影方向向量 double[] direct = renderer.GetActiveCamera().GetDirectionOfProjection(); vtkPoints newPts = projectPoints(pt0,direct); vtkPolyData projPolyline = buildClosedPolyLine(newPts); vtkActor projActor = makeActor(projPolyline); projActor.GetProperty().SetColor(1,0,0); renderer.AddActor(projActor); super.OnRightButtonDown(); } //构建封闭的折线 public static vtkPolyData buildClosedPolyLine(vtkPoints pt){ vtkPolyData oreLine = new vtkPolyData(); oreLine.SetPoints(pt); vtkCellArray polyline = new vtkCellArray(); polyline.InsertNextCell(pt.GetNumberOfPoints()+1); for(int i=0;i<pt.GetNumberOfPoints();i++){ polyline.InsertCellPoint(i); } polyline.InsertCellPoint(0); oreLine.SetLines(polyline); return oreLine; } }
执行效果如下图:
图中红色的折线即为上面白色折线投影之后的样子。
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3224要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2824要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 7012好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2108java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1703java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3304java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4716在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4369何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 5094在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4215在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5174在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3789Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32787在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2169下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1780因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1461前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 135601、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12462老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 4060软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
在IT领域,尤其是在科学可视化和图形处理中,`VTK`(Visualization Toolkit)是一个非常重要的开源库。本篇文章将深入探讨如何使用`VTK`来绘制等值线,这是一个用于展示数据分布和特征的重要工具。等值线是连接相同...
VTK-9.1.0-cp38-cp38-win_amd64.zip 是针对Python 3.8版本且适用于64位Windows系统的VTK库的压缩包。这个版本的VTK提供了对现代计算机图形硬件的充分利用,支持复杂的三维渲染和交互操作。 "whl" 文件格式是Python...
vtk-9.3.0-cp310-cp310-win_amd64.whl
在VTK-5.2.0-win32这个压缩包中,主要的文件是`vtk-5.2.0-win32.exe`,这是一个可执行文件,用于在Windows系统上安装VTK库。这个安装程序将包含各种库文件、头文件、示例代码、文档等,以便开发者可以在自己的项目中...
3. 打开命令提示符或者PowerShell,切换到包含“VTK-8.2.0-cp36-cp36m-win_amd64.whl”文件的目录,例如:`cd C:\path\to\downloaded\folder`。 4. 在命令行中输入并执行以下命令:`pip install VTK-8.2.0-cp36-cp36...
vtk-9.3.1-cp312-cp312-win_amd64.whl
VTK-8.2.0-cp38-cp38-win_amd64
vtk-9.3.0-cp38-cp38-win_amd64.whl
vtk-9.3.1-cp310-cp310-win_amd64.whl
vtk-9.3.1-cp39-cp39-win_amd64.whl
VTK-9.0.1-cp36-cp36m-win_amd64.whl
VTK-8.1.0是安装mayavi-4.5.0+vtk81-cp36-cp36m-win_amd64.whl的基础模块,为后期numpy模块中图像的显示做铺垫。
The Visualization Toolkit (VTK) is an open-source, freely available software system for 3D computer graphics, image processing and visualization. VTK consists of a C++ class library and several ...
vtk-9.1.0-cp36-cp36m-win_amd64
适用平台:windows x64文件格式:whl安装方式:切换到whl路径,执行pip install whl文件名
VTK-7.1.1-cp36-cp36m-win32
**Python库vtk-9.0.3-cp39-cp39-macosx_11_0_arm64.whl详解** `vtk-9.0.3-cp39-cp39-macosx_11_0_arm64.whl`是一个针对Python开发的库,特别适用于在MacOS系统上运行,特别是搭载了Apple M1芯片的新型号(arm64架构...
VTK-5.0.1-control-1.1.zip 是一个特定版本的VTK控制模块的压缩包,适用于开发三维软件。在VTK中,"control"通常指的是用户界面和交互部分,它允许用户与三维可视化场景进行交互。 VTK的核心功能包括数据处理、几何...
VTK-9.1.0-cp37-cp37m-win_amd64.whl
VTK-9.1.0-cp310-cp310-win_amd64.whl