莫比乌斯环-vtkTriangleStrip

  1 #ifndef INITIAL_OPENGL
  2 #define INITIAL_OPENGL
  3 #include <vtkAutoInit.h>
  4 VTK_MODULE_INIT(vtkRenderingOpenGL)
  5 VTK_MODULE_INIT(vtkInteractionStyle)
  6 VTK_MODULE_INIT(vtkRenderingFreeType)
  7 #endif
  8 #include <iostream>
  9 using namespace std;
 10
 11 #include "vtkPolyDataMapper.h"
 12 #include "vtkWin32OpenGLRenderWindow.h"
 13 #include "vtkRenderWindow.h"
 14 #include "vtkRenderWindowInteractor.h"
 15 #include "vtkRenderer.h"
 16 #include "vtkPoints.h"
 17 #include "vtkWin32RenderWindowInteractor.h"
 18 #include "vtkProperty.h"
 19 #include "vtkFloatArray.h"
 20 #include "vtkPolyData.h"
 21 #include "vtkDataSetMapper.h"
 22 #include "vtkActor2D.h"
 23 #include "vtkPointData.h"
 24 #include "vtkPolyVertex.h"
 25 #include <vtkInteractorStyleTrackballCamera.h>
 26 #include <vtkCellArray.h>
 27 #include "vtkDelaunay2D.h"
 28 #include "vtkMath.h"
 29 #include <vtkTransformFilter.h>
 30 #include <vtkCamera.h>
 31 #include <vtkTriangleStrip.h>
 32
 33 void myShow(vtkPolyData* anInput)
 34 {
 35     vtkSmartPointer<vtkPolyDataMapper> aMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
 36     aMapper->SetInputData(anInput);
 37     aMapper->ScalarVisibilityOn();
 38
 39     vtkSmartPointer<vtkActor> anActor=vtkSmartPointer<vtkActor>::New();
 40     anActor->SetMapper(aMapper);
 41     anActor->GetProperty()->SetRepresentationToSurface();
 42     anActor->GetProperty()->SetPointSize(1);
 43     anActor->GetProperty()->SetColor(1,0,1);
 44     anActor->GetProperty()->SetOpacity(0.4);
 45
 46     vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer<vtkRenderer>::New();
 47     vtkSmartPointer<vtkRenderWindow> renWin=vtkSmartPointer<vtkRenderWindow>::New();
 48
 49     ren1->AddActor(anActor);
 50
 51     ren1->SetBackground(0.5,0.5,0.5);
 52     ren1->SetBackground2(1,0,0);
 53     renWin->AddRenderer(ren1);
 54     renWin->SetSize(512,512);
 55
 56     vtkSmartPointer<vtkRenderWindowInteractor> iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
 57     vtkSmartPointer<vtkInteractorStyleTrackballCamera> style=vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
 58     iren->SetRenderWindow(renWin);
 59     iren->SetInteractorStyle(style);
 60
 61     ren1->ResetCamera();
 62     renWin->Render();
 63     iren->Start();
 64 }
 65
 66 int main()
 67 {
 68     //创建几何点数据
 69     double vArr[2]={-0.5,0.5};
 70     double theta=vtkMath::Pi()*2;
 71     int thetaResolution=60;
 72     double dTheta=theta/thetaResolution;
 73     double *uArr=new double[thetaResolution];
 74     vtkSmartPointer<vtkPoints> points=vtkSmartPointer<vtkPoints>::New();
 75     for(int i=0;i<thetaResolution+1;i++)
 76     {
 77         uArr[i]=i*dTheta;
 78         double u=uArr[i];
 79         for(int j=0;j<2;j++)
 80         {
 81             double v=vArr[j];
 82             double pt[3]={(2+v/2*cos(u/2))*cos(u),(1+v/2*cos(u/2))*sin(u),v/2*sin(u/2)};
 83             points->InsertNextPoint(pt);
 84
 85         }
 86     }
 87     //创建拓扑结构
 88     vtkSmartPointer<vtkTriangleStrip> mobiusStrip=vtkSmartPointer<vtkTriangleStrip>::New();
 89     mobiusStrip->GetPointIds()->SetNumberOfIds((thetaResolution+1)*2);
 90     for(int i=0;i<(thetaResolution+1)*2;i++)
 91         mobiusStrip->GetPointIds()->SetId(i,i);
 92     //将拓扑结构组合进Cell
 93     vtkSmartPointer<vtkCellArray> mobiusCell=vtkSmartPointer<vtkCellArray>::New();
 94     mobiusCell->InsertNextCell(mobiusStrip);
 95     //将几何点与Cell结构组合成一个PolyData。
 96     vtkSmartPointer<vtkPolyData> mobiusPolydata=vtkSmartPointer<vtkPolyData>::New();
 97     mobiusPolydata->SetPoints(points);
 98     mobiusPolydata->SetStrips(mobiusCell);
 99
100     myShow(mobiusPolydata);
101     return 0;
102 }
时间: 2024-10-27 17:38:40

莫比乌斯环-vtkTriangleStrip的相关文章

学习RxJS:Cycle.js

原文地址:http://www.moye.me/2016/06/16/learning_rxjs_part_two_cycle-js/ 是什么 Cycle.js 是一个极简的JavaScript框架(核心部分加上注释125行),提供了一种函数式,响应式的人机交互接口(以下简称HCI): 函数式 Cycle.js 把应用程序抽象成一个纯函数 main(),从外部世界读取副作用(sources),然后产生输出(sinks) 传递到外部世界,在那形成副作用.这些外部世界的副作用,做为Cycle.js的

理科生毁灭世界

1. 青年问禅师: “大师, 我很爱我的女朋友, 她也有很多优点, 但是总有几个缺点让我非常讨厌, 有什么方法能让她改变?” 禅师浅笑, 答: “方法很简单, 不过若想我教你, 你需先下山为我找一张只有正面没有背面的纸回来. ” 青年略一沉吟, 掏出一个莫比乌斯环. 莫比乌斯环只有一面 2. 青年问禅师: “我的心被忧愁和烦恼塞满了怎么办?” 禅师若有所思地说: “你随手画一条曲线. 用放大镜放大了看. 它的周围难道不是十分明朗开阔吗?” 那个青年画了一条皮亚诺曲线. 皮亚诺曲线可以遍历单位正方

据说理科生是鸡汤克星【转载】

链接:www.guancha.cn/zhang-xiao-bao/2014_07_23_249503.shtml 老禅师忙着给各种年轻人指导人生,总是用一些模凌两可的语句,想着想着你自己似乎就想透了.但当满口心灵鸡汤的老禅师遇上理科生-- 1.青年问禅师:"大师,我很爱我的女朋友,她也有很多优点,但是总有几个缺点让我非常讨厌,有什么方法能让她改变?" 禅师浅笑,答:"方法很简单,不过若想我教你,你需先下山为我找一张只有正面没有背面的纸回来." 青年略一沉吟,掏出一个

学术-物理:彭罗斯楼梯

ylbtech-学术-物理:彭罗斯楼梯 彭罗斯阶梯(Penrose stairs)是一个有名的几何学悖论,指的是一个始终向上或向下但却走不到头的阶梯,可以被视为彭罗斯三角形的一个变体,在此阶梯上永远无法找到最高的一点或者最低的一点.彭罗斯阶梯由英国数学家罗杰·彭罗斯及其父亲遗传学家列昂尼德·彭罗斯于1958年提出. 彭罗斯阶梯不可能在三维空间内存在,但只要放入更高阶的空间,彭罗斯阶梯就可以很容易的实现.如同莫比乌斯环.克莱因瓶. 1.返回顶部 1. 中文名:彭罗斯阶梯 外文名:Penrose s

低刨讼平用骨耐醚褪醒劝GE2g

如果说下水道是一个城市的良心,那么厕所就是一座城市的门脸. 很多年前,人们就发现一个有意思的现象:一个城市的文明程度可以从其厕所的卫生程度得出,厕所越干净.城市越发达.但直到今天,大数据无法解释这背后的原因:究竟是城市发达了厕所自然就干净了,还是厕所干净了也会促进城市的发展. 对于这样「先有鸡还是先有蛋的问题」,还需要大数据加传统民调和小数据的结合才有肯能找到答案. 01 谷歌为何只猜对了一次? 感谢从维克托·迈尔-舍恩伯格到马云的孜孜不倦地布道,大数据现在几乎成了全球先进生产力的标志,而且几乎

[思考的乐趣] 有趣的莫比乌斯带

我们知道,莫比乌斯带是一种拓展图形.也就是说,一条莫比乌斯带不能够连续地变为一个“8”.百度上的这个图很有意思的解释了莫比乌斯带的性质: 我第一次接触莫比乌斯带的时候,是在小学的手工课上,那时候还叫做自然科学课(一直觉得这是特别神奇的课程,直到今天,总会在学到什么新东西的时候恍然发现当时在自然科学课上就接触到了……好,这里不展开,原谅zyy废话太多).老师教我们将一根纸带一端扭曲180°后跟另一端粘在一起,就做成了一条莫比乌斯带.用笔从每个位置开始沿着纸带的一个方向画,当回到起点时就会发现一个有

[jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)

题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 我们设$f(x)$表示最小循环节长度为x的合法序列数,那么有$ans=\sum_{d|gcd(n,m)}\frac{1}{d}f(d)$ 这是因为最小循环节为d的序列对应的环会被计算d次,比如 0101,最小循环节长度为 2(循环节为 01),其对应的环会被统计 2 次(序列 0101 与 1010)

一个不简洁的约瑟夫环解法

约瑟夫环类似模型:已知有n个人,每次间隔k个人剔除一个,求最后一个剩余的. 此解法为变种,k最初为k-2,之后每次都加1. 例:n=5,k=3.从1开始,第一次间隔k-2=1,将3剔除,第二次间隔k-1=2,将1剔除.依此类推,直至剩余最后一个元素. 核心思路:将原列表复制多份横向展开,每次根据间隔获取被剔除的元素,同时将此元素存入一个剔除列表中.若被剔除元素不存在于剔除列表,则将其加入,若已存在,则顺势后移至从未加入剔除列表的元素,并将其加入.如此重复n-1次.面试遇到的题,当时只写了思路,没

三行写出莫比乌斯函数(HDU1695)

莫比乌斯函数是可以在三行内写出来的 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1000000; 5 int mu[maxn+10],T; 6 void Mobius(){ 7 for(int d=1,k;d<=maxn;++d) 8 for(mu[1]=1,k=d<<1;k<=maxn;mu[k]=mu[k]-mu[d],k+=d);