wiki polygonintersection 多邊形和線的交叉點
vtk繪製多邊形流程首先通過vtkpoints,vtkcellarray,vtkpolydata組合使用
先新增點,相鄰兩點建立單元,給資料物件新增點和單元
只是利用vtkpolydata不夠的 凹多邊形繪製會有問題,利用vtktrianglfiler 轉三角形後 就可以了
// 先新增多邊形的各點
vtksmartpointer points = vtksmartpointer
::new();
points->insertnextpoint(0.0, 0.0, 0.0);
points->insertnextpoint(1.0, 0.0, 0.0);
points->insertnextpoint(1.0, 1.0, 0.0);
points->insertnextpoint(0.0, 1.0, 0.0);
// 通過點集建立多邊形
vtksmartpointer polygon = vtksmartpointer
::new();
polygon->getpoints()->deepcopy(points);
polygon->getpointids()->setnumberofids(4); // 4 corners of the square
polygon->getpointids()->setid(0, 0);
polygon->getpointids()->setid(1, 1);
polygon->getpointids()->setid(2, 2);
polygon->getpointids()->setid(3, 3);
// 宣告
int intersectwithline(double p1[3], double p2[3], double tol, double& t,double x[3], double pcoords[3], int& subid);
// 測試資料
double p1[3] = ;
double p2[3] = ;
double tolerance = 0.001; // 公差
// 輸出
double t; // 交點的線段參量(比例)座標,p1是0,p2是1
double x[3]; // 交點座標
double pcoords[3];
int subid;
// 使用
vtkidtype id = polygon->intersectwithline(p1, p2, tolerance, t, x, pcoords, subid);
檢測多邊形polgon
與線段(p1,p2)
是否相交,若相交,則返回1,不相交(包括內部),則返回0。
官方api解釋:與上同intersect with a ray. return parametric coordinates (both line and cell) and global intersection coordinates,
given ray definition and tolerance. the method returns non-zero value if intersection occurs.
static
int intersection(double p1[3], double p2[3],
double x1[3], double x2[3],
double& u, double& v);
vtkidtype isture = line->intersection(p1, p2, p3, p4, u, v);
檢測兩線是否相交,並返回相交位置在各線的比例位置。
如果兩線相交,則返回2,若不相交,則返回3。
若不相交,則將x1,x2投影到p1,p2所在平面,計算u、v。
#include "vtksmartpointer.h"
#include "vtkproperty.h"
#include "vtkcamera.h"
#include "vtkcylindersource.h"
#include "vtkactor.h"
#include "vtkrenderer.h"
#include "vtkrenderwindow.h"
#include "vtkrenderwindowinteractor.h"
#include
#include
#include
int main(int, char *)
; double p2[3] = ;
double tolerance = 0.001; // 公差
// outputs
double t; // parametric coordinate of intersection (0 (corresponding to p1) to 1 (corresponding to p2))
double x[3]; // the coordinate of the intersection
double pcoords[3];
int subid;
vtkidtype id = polygon->intersectwithline(p1, p2, tolerance, t, x, pcoords, subid);
std::cout
<< "t: "
<< t << std::endl;
std::cout
<< "pcoords: "
<< pcoords[0] << " "
<< pcoords[1] << " "
<< pcoords[2] << std::endl;
std::cout
<< "相交? "
<< id << std::endl;
std::cout
<< "subid: "
<< subid << std::endl;
std::cout
<< "x : "
<< x[0] << " "
<< x[1] << " "
<< x[2] << std::endl;
vtksmartpointerline = vtksmartpointer::new();
double p3[3] = ;
double p4[3] = ;
double u, v;
vtkidtype id2 = line->intersection(p1, p2, p3, p4, u, v);
std::cout
<<"u :"
<< u << endl;
std::cout
<< "v :"
<< v << endl;
std::cout
<< "相交? :"
<< id2 << endl;
return
0;}
c 線向量生成多邊形 C 多邊形求角 例項說
呼叫示例 anglecalculation.cxpoint p1 new anglecalculation.cxpoint 112,12 p2 new anglecalculation.cxpoint 68,51 p3 new anglecalculation.cxpoint 0,0 double ...
簡單多邊形與圓相交求面積
所謂簡單多邊形,就是指不相鄰的邊不相交,且每個頂點只跟2條邊相鄰。一般而言,除非題目要求判斷是否為簡單多邊形,否則給出的資料肯定都是簡單多邊形。以下將簡單多邊形簡稱為多邊形。多邊形一般都是以點集的形式給出,順時針或者逆時針。另外乙個需要注意的概念就是多邊形的凹凸性。一般而言,凸多邊形的演算法比凹多邊...
計算幾何 正多邊形的滾動與旋輪線
今天在看matrix 大牛的部落格時,發現乙個有趣的問題,學習學習下 正多變形的滾動與旋輪線下方的面積 問題描述 乙個圓盤在地面上滾動一周,那麼圓周上一點所形成的軌跡就叫做旋輪線 或者擺線 旋輪線下方的面積是多少?推廣至正多邊形,旋輪線下方的面積又是多少?問題分析 1.在問題是圓的情況下,顯然我們可...