四方邊緣結構的一般概念
每個QE單元存儲四條有向邊,其中兩條為主邊(Primal Edge):e0和e2,描述當前的二維平面剖分S;另外兩條為對偶邊(Dual Edge):e1和e3,描述S的對偶圖。
基本介紹
- 中文名:四方邊緣結構
- O:Orig
- D:Dest
- L:Left
四方邊緣,其他信息,
四方邊緣
四方邊緣結構的一般概念
每個QE單元存儲四條有向邊,其中兩條為主邊(Primal Edge):e0和e2,描述當前的二維平面剖分S;另外兩條為對偶邊(Dual Edge):e1和e3,描述S的對偶圖。
每條Edge定義有三個基本行為:
Org:返回當前有向邊的起點
Rot:返回當前QE單元中逆時針旋轉90度後的有向邊,也即當前Edge的對偶邊
Onext:返回S中以當前有向邊Org為基點逆時針旋轉到的下一條Edge
其他信息
可以選取QE單元的任意一條Edge作為起始邊來表示QE中的四條Edge。設起始邊為e0。,則任意的有向邊可以表示為(e, r),有如下關係:
,其中r∈{0,1,2,3}.
基於基本行為還可以派生出更多的行為:
解析如下:
Next--在鄰接的face或Vertex中,以counterclockwise(ccw)方向的下一個要素;
--"next"means next in a counterclockwise (ccw) sense around a neighboring face orvertex
Prev--在鄰接的face或Vertex中,以clockwise(cw)方向的下一個要素;
-- "prev"means next in a clockwise (cw) sense around a neighboring face or vertex.
e->Rnext--其右邊的face跟e的右邊的face是同一個,並且跟e是逆時針方向
--nextedge around right face, with same right face
e->Lnext--其左邊的face跟e的左邊的face是同一個,並且跟e是逆時針方向
--nextedge around left face, with same left face
e->Onext--跟e是同一個起點,並且跟e是逆時針方向
--next edge around origin, with same origin
e->Dnext--跟e是同一個終點,並且跟e是逆時針方向
--nextedge around dest, with same dest
e->Rprev--其右邊的face跟e的右邊的face是同一個,並且跟e是順時針方向
--prevedge around right face, with same right face
e->Lprev--其左邊的face跟e的左邊的face是同一個,並且跟e是順時針方向
--prevedge around left face, with same left face
e->Oprev--跟e是同一個起點,並且跟e是順時針方向
--prevedge around origin, with same origin
e->Dprev--跟e是同一個終點,並且跟e是順時針方向
--prevedge around dest, with same dest
邊環(Edge Ring):擁有共同起點的一系列有向邊稱為邊環,一條孤立的有向邊也可以看作是一個最簡單的邊環。
Splice(a, b):包含有向邊a和b的邊環之間的接合或分解的過程。特點是:
1)如果兩個邊環是分離的,Splice將其接合在一起。
2)如果兩個邊環是同一個,Splice將其分解為兩個邊環。
JTS中的Tin的四方邊緣
JTS-1.11中,也增加了對創建Tin的支持,其中Tin的數據結構就是四方邊緣結構:
在所有的類中(DelaunayTriangulationBuilder、ConformingDelaunayTriangulationBuilder、VoronoiDiagramBuilder),都有一個getSubdivision()方法,
DTin | |
CDTin | |
Voronoi |
它們都返回一個QuadEdgeSubdivision類的對象,
其結構如下:
O:Orig
D:Dest
L:Left
R:Right
Next:左轉
Prev:右轉
System.out.println("q :"+ q);
System.out.println("dNext :"+ q.dNext());
System.out.println("dPrev :"+ q.dPrev());
System.out.println("lNext :"+ q.lNext());
System.out.println("lPrev :"+ q.lPrev());
System.out.println("rNext :"+ q.rNext());
System.out.println("rPrev :"+ q.rPrev());
System.out.println("oNext :"+ q.oNext());
System.out.println("oPrev :"+ q.oPrev());
System.out.println("dest :"+ q.dest());
System.out.println("orig :"+ q.orig());
System.out.println("rot :"+ q.rot());//有錯,toString裡面的錯
System.out.println("invRot :"+ q.invRot());//有錯,toString裡面的錯
System.out.println("sym :"+ q.sym());