本發(fā)明涉及三維空間圖形繪制領(lǐng)域,尤其涉及一種基于連續(xù)折線形三維管道的繪制方法及系統(tǒng)。
背景技術(shù):
隨著計算機技術(shù)的發(fā)展,三維管道的創(chuàng)建方法根據(jù)實際應(yīng)用的場景與目的不同,而大量的涌現(xiàn)出來。但現(xiàn)有三維管道的創(chuàng)建方法,多采用樣條曲線或貝塞爾曲線作為三維管道的路徑,從而進行創(chuàng)建管道的方式。而對于折線形管道的創(chuàng)建,則需要由多個直線形管道進行拼接組合形成,使得在折線彎角處,存在無法閉合的現(xiàn)象。由于以上兩種方法,很難滿足很多用戶的使用,和場景的需求。因此本次發(fā)明將對于構(gòu)建三維連續(xù)折線形直管道給出切實可行的創(chuàng)建方法。
技術(shù)實現(xiàn)要素:
針對上述現(xiàn)有技術(shù)存在的不足和缺陷,本發(fā)明提出一種基于連續(xù)折線形三維管道的繪制方法及系統(tǒng),確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;分別計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;分別計算所有預設(shè)節(jié)點與其左/右補點法線、次法線的單位向量;基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標;基于待繪制節(jié)點的三維坐標繪制三維管道;
具體發(fā)明內(nèi)容包括:
一種基于連續(xù)折線形三維管道的繪制方法包括:
確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;
分別計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;
分別計算所有預設(shè)節(jié)點與其左/右補點法線、次法線的單位向量;
基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標;
基于待繪制節(jié)點的三維坐標繪制三維管道;
其中,所述預設(shè)節(jié)點的三維坐標為posi={posi.x,posi.y,posi.z},其中i為預設(shè)節(jié)點的標號,posi.x代表預設(shè)節(jié)點i在X軸上的坐標,,posi.y代表預設(shè)節(jié)點i在Y軸上的坐標,posi.z代表預設(shè)節(jié)點i在Z軸上的坐標。其中i屬于[0,1,2,……m],m為整數(shù)。
進一步地,所述計算待繪制管道的所有預設(shè)節(jié)點的左補點的三維坐標的方法具體為:bosi1={Li*Qi1+posi};所述計算待繪制管道的所有預設(shè)節(jié)點的右補點的三維坐標的方法具體為:bosi2={Li*Qi2+posi};其中:Li為預設(shè)節(jié)點i與其左/右補點的距離, Li=R*sin(phi/2);其中R為待繪制管道的半徑,phi為左補點的切線與右補點的切線間的夾角;所述phi的計算方法具體為:phi=arcos(Qi1·Qi2),其中Qi1為預設(shè)節(jié)點i的左補點的切線,Qi2為預設(shè)節(jié)點i的右補點的切線。其中,Q01,Q02,bos01,bos02是不存在的。
進一步地,所述待繪制管道的橫截面包括多邊形。
進一步地,所述基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標方法為:
基于預設(shè)節(jié)點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = posi.x+cx * pnormali.x + cy * pbinormali.x;
Posi.y = posi.y + cx * pnormali.y + cy * pbinormali.y;
Posi.z = posi.z+ cx * pnormali.z + cy * pbinormali.z;
其中,pnormali為預設(shè)節(jié)點i的法線坐標,pbinormali為預設(shè)節(jié)點i的次法線坐標;
基于左右補點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = bosi.x+cx * bnormali.x + cy * bbinormali.x;
Posi.y = bosi.y + cx * bnormali.y + cy * bbinormali.y;
Posi.z = bosi.z+ cx * bnormali.z + cy * bbinormali.z;
其中,bnormali為補點i的法線坐標,bbinormali為補點i的次法線坐標;
cx=-R* cos(v);cy=R*sin(v);其中,v = 2PI*j / n,j表示待繪制管道的第j個繪制節(jié)點,n為待繪制管道的多邊形的邊數(shù)。
一種基于連續(xù)折線形三維管道的繪制系統(tǒng),包括:
預設(shè)模塊,用于確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;
第一計算模塊,用于計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;
第二計算模塊,用于計算所有預設(shè)節(jié)點與其左/右補點法線、次法線的單位向量;
第三計算模塊,用于基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標;
繪制模塊,用于基于待繪制節(jié)點的三維坐標繪制三維管道;
所述預設(shè)節(jié)點的三維坐標為posi={posi.x,posi.y,posi.z},其中i為預設(shè)節(jié)點的標號,posi.x代表預設(shè)節(jié)點i在X軸上的坐標,,posi.y代表預設(shè)節(jié)點i在Y軸上的坐標,posi.z代表預設(shè)節(jié)點i在Z軸上的坐標。
進一步地,所述計算待繪制管道的所有預設(shè)節(jié)點的左補點的三維坐標的方法具體為:bosi1={Li*Qi1+posi};所述計算待繪制管道的所有預設(shè)節(jié)點的右補點的三維坐標的方法具體為:bosi2={Li*Qi2+posi};其中:Li為預設(shè)節(jié)點i與其左/右補點的距離, Li=R*sin(phi/2);其中R為待繪制管道的半徑,phi為左補點的切線與右補點的切線間的夾角;所述phi的計算方法具體為:phi=arcos(Qi1·Qi2),其中Qi1為預設(shè)節(jié)點i的左補點的切線,Qi2為預設(shè)節(jié)點i的右補點的切線。其中,Q01,Q02,bos01,bos02是不存在的。
進一步地,待繪制管道的橫截面包括多邊形。
進一步地,所述基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標方法為:
基于預設(shè)節(jié)點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = posi.x+cx * pnormali.x + cy * pbinormali.x;
Posi.y = posi.y + cx * pnormali.y + cy * pbinormali.y;
Posi.z = posi.z+ cx * pnormali.z + cy * pbinormali.z;
其中,pnormali為預設(shè)節(jié)點i的法線坐標,pbinormali為預設(shè)節(jié)點i的次法線坐標;
基于左右補點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = bosi.x+cx * bnormali.x + cy * bbinormali.x;
Posi.y = bosi.y + cx * bnormali.y + cy * bbinormali.y;
Posi.z = bosi.z+ cx * bnormali.z + cy * bbinormali.z;
其中,bnormali為補點i的法線坐標,bbinormali為補點i的次法線坐標;
cx=-R* cos(v);cy=R*sin(v);其中,v = 2PI*j / n,j表示待繪制管道的第j個繪制節(jié)點,n為待繪制管道的多邊形的邊數(shù)。
本發(fā)明的有益效果是:
1、首先,能夠使管道按照預先設(shè)定的路徑進行繪制,不會偏離預設(shè)路徑。解決了現(xiàn)有技術(shù)中折線形三維管道在繪制過程中出現(xiàn)的彎折、管道半徑大小不一,導致管道膨脹或收縮變形的問題;
2、其次,繪制的三維管道在通過預設(shè)節(jié)點的折線的拐角連接處能夠閉合,不會出現(xiàn)尖角、斷節(jié)等情況,應(yīng)用到更多場景,更加真實貼切,達到了良好的視覺效果;
3、最后,該繪制方法繪制的三維管道是通過一次繪制而成,并不是現(xiàn)有技術(shù)中將多段管道拼接而成,而繪制過程中,每調(diào)用一次WebGL API都會占用CPU的內(nèi)存影響CPU的效率,每個調(diào)用都會使得CPU進行額外的處理和數(shù)據(jù)復制,而通過本方法提供的數(shù)據(jù)已經(jīng)轉(zhuǎn)換成CPU提供的是大批可并行處理的數(shù)據(jù),提升了運行CPU的效率。
附圖說明
為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一種基于連續(xù)折線形三維管道的繪制方法實施例1流程圖;
圖2為本發(fā)明一種于連續(xù)折線形三維管道的系統(tǒng)結(jié)構(gòu)圖;
圖3為本發(fā)明繪制的三維管道的效果圖的主視圖;
圖4為本發(fā)明繪制的三維管道的效果圖的側(cè)視圖;
圖5為現(xiàn)有技術(shù)繪制的三維管道的效果圖的主視圖;
圖6為現(xiàn)有技術(shù)繪制的三維管道的效果圖的側(cè)視圖;
圖7為本發(fā)明三維管道所有預設(shè)節(jié)點的示意圖;
圖8為本發(fā)明三維管道所有預設(shè)節(jié)點的左補點以及右補點的示意圖;
圖9為本發(fā)明基于預設(shè)節(jié)點Y0計算出的待繪制節(jié)點的分布示意圖;
圖10為本發(fā)明三維管道所有待繪制節(jié)點的分布示意圖;
圖11為本發(fā)明三維管道預設(shè)節(jié)點的切線、法線、次法線的向量示意圖;
圖12為本發(fā)明三維管道預設(shè)節(jié)點的右補點切線、法線、次法線的向量示意圖;
圖13為本發(fā)明基于所有待繪制節(jié)點繪制的三維管道效果示意圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進一步詳細的說明。
本發(fā)明給出了一種基于連續(xù)折線形三維管道的繪制方法實施例1如圖1所示,包括:
S101:確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;
S102:分別計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;
若待繪制管道上的預設(shè)節(jié)點的個數(shù)為n,設(shè)定此時待繪制管道上的節(jié)點總數(shù)量為(n-2)*3+2,,其中補點的數(shù)量為節(jié)點總數(shù)量與預設(shè)節(jié)點之差。待繪制管道上節(jié)點的排列順序為:預設(shè)節(jié)點Y0,左補點B11(代表預設(shè)節(jié)點1的左補點),預設(shè)節(jié)點Y1,右補點B12(預設(shè)節(jié)點1的右補點),左補點B21(預設(shè)節(jié)點2的左補點),預設(shè)節(jié)點Y2,右補點B22(預設(shè)節(jié)點的右補點)……左補點B(n-1)1(預設(shè)節(jié)點n-1的左補點),預設(shè)節(jié)點Yn-1,右補點B(n-1)2(預設(shè)節(jié)點n-1的右補點),預設(shè)節(jié)點n;
S103:分別計算所有預設(shè)節(jié)點與其左補點及右補點的切線、法線、次法線的單位向量;
S104:基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標;
S105:基于待繪制節(jié)點的三維坐標繪制三維管道,如圖3和4所示。
其中,預設(shè)節(jié)點的三維坐標為posi={posi.x,posi.y,posi.z},其中i為預設(shè)節(jié)點的標號,posi.x代表預設(shè)節(jié)點i在X軸上的坐標,posi.y代表預設(shè)節(jié)點i在Y軸上的坐標,posi.z代表預設(shè)節(jié)點Yi在Z軸上的坐標。
優(yōu)選地,所述計算待繪制管道的所有預設(shè)節(jié)點的左補點的三維坐標的方法具體為:bosi1={Li*Qi1+posi};所述計算待繪制管道的所有預設(shè)節(jié)點的右補點的三維坐標的方法具體為:bosi2={Li*Qi2+posi};其中:Li為預設(shè)節(jié)點i與其左/右補點的距離, Li=R*sin(phi/2);其中R為待繪制管道的半徑,phi為左補點的切線與右補點的切線間的夾角;所述phi的計算方法具體為:phi=arcos(Qi1·Qi2),其中Qi1為預設(shè)節(jié)點i的左補點的切線,Qi2為預設(shè)節(jié)點i的右補點的切線。其中,Q01,Q02,bos01,bos02是不存在的。
優(yōu)選地,所述待繪制管道的橫截面包括多邊形。
優(yōu)選地,所述基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標方法為:
基于預設(shè)節(jié)點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = posi.x+cx * pnormali.x + cy * pbinormali.x;
Posi.y = posi.y + cx * pnormali.y + cy * pbinormali.y;
Posi.z = posi.z+ cx * pnormali.z + cy * pbinormali.z;
其中,pnormali為預設(shè)節(jié)點i的法線坐標,pbinormali為預設(shè)節(jié)點i的次法線坐標;
基于左右補點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = bosi.x+cx * bnormali.x + cy * bbinormali.x;
Posi.y = bosi.y + cx * bnormali.y + cy * bbinormali.y;
Posi.z = bosi.z+ cx * bnormali.z + cy * bbinormali.z;
其中,bnormali為補點i的法線坐標,bbinormali為補點i的次法線坐標;
cx=-R* cos(v);cy=R*sin(v);其中,v = 2PI*j / n,j表示待繪制管道的第j個繪制節(jié)點,n為待繪制管道的多邊形的邊數(shù)。
本發(fā)明給出了一種基于連續(xù)折線形三維管道的繪制方法實施例如下:
S101:確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;
其中,預設(shè)節(jié)點可分為首節(jié)點,尾節(jié)點以及中間預設(shè)節(jié)點,則待繪制管道的所有預設(shè)節(jié)點至少為2個,若為2個,則所有預設(shè)節(jié)點即首尾預設(shè)節(jié)點。
所述預設(shè)節(jié)點的三維坐標為posi={posi.x,posi.y,posi.z},其中i為預設(shè)節(jié)點的標號,posi.x代表預設(shè)節(jié)點i在X軸上的坐標,,posi.y代表預設(shè)節(jié)點i在Y軸上的坐標,posi.z代表預設(shè)節(jié)點i在Z軸上的坐標。其中,i=0,1,2,…..整數(shù)。
在此,設(shè)定預設(shè)節(jié)點為5個,分別為預設(shè)節(jié)點Y0,Y1,Y2,Y3,Y4,如圖7所示,則預設(shè)節(jié)點的三維坐標為
pos0={ pos0.x,pos0.y,pos0.z},
pos1={ pos1.x,pos1.y,pos1.z},
pos2={ pos2.x,pos2.y,pos2.z},
pos3={ pos3.x,pos3.y,pos3.z},
pos4={ pos4.x,pos4.y,pos4.z},
S102:分別計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;
其中,添加的補點是為了在繪制過程中的夾角為銳角的拐點處,使得轉(zhuǎn)折更加自然,避免由于兩個預設(shè)節(jié)點間的距離過長而使管道變形也避免了繪制管道拐角處出現(xiàn)縫隙或者缺口,影響真實美觀性。補點的添加方式是在除了首尾兩個預設(shè)節(jié)點外的所有中間預設(shè)中間節(jié)點的兩側(cè)各添加一個補點,分別為左補點、右補點。
若待繪制管道上的預設(shè)節(jié)點的個數(shù)為5,設(shè)定此時帶繪制管道上的節(jié)點總數(shù)量為11,,其中補點的數(shù)量為節(jié)點總數(shù)量與預設(shè)節(jié)點之差。待繪制管道上節(jié)點的排列順序為:如圖8所示,預設(shè)節(jié)點Y0,左補點B11(預設(shè)節(jié)點1的左補點),預設(shè)節(jié)點Y1,右補點B12(預設(shè)節(jié)點1的右補點),
左補點B21(預設(shè)節(jié)點2的左補點),預設(shè)節(jié)點Y2,右補點B22(預設(shè)節(jié)點的右補點),
左補點B31(預設(shè)節(jié)點3的左補點),預設(shè)節(jié)點Y3,右補點B32(預設(shè)節(jié)點3的右補點),預設(shè)節(jié)點Y4。
在此,以預設(shè)節(jié)點Y1及其左補點B11、右補點B12為例:
計算預設(shè)節(jié)點Y1的左補點B11的切線Q11=pos0-pos1,右補點B12的切線Q12=pos2-pos1。分別求出Q11與Q12單位向量。
計算左補點B11的切線Q11與右補點B12的切線Q12的空間夾角為phi= phi=arcos(Q11·Q12),其中,Q11與Q12的點積值在-1到1之間。
則左補點B11的三維坐標bos11={L1*Q11+pos1};其中:L1代表第1個預設(shè)節(jié)點與其左補點的距離;Q11代表預設(shè)節(jié)點Y1的左補點B11的切線;所述L1的計算方法具體為:L1=R/sin(phi/2);其中R為待繪制管道的半徑,phi為左補點的切線Q11與右補點的切線Q12間的夾角;所述phi的計算方法具體為:phi=arcos(Q11·Q12)。
同理,可以按照上述方法計算其他預設(shè)節(jié)點的左補點以及右補點。
S103:分別計算所有預設(shè)節(jié)點與其左/右補點法線、次法線的單位向量;
以預設(shè)節(jié)點Y1為例:
首先計算預設(shè)節(jié)點Y0與預設(shè)節(jié)點Y1之間的距離S01,預設(shè)節(jié)點Y1與預設(shè)節(jié)點Y2之間的距離S12,若S12< S01,則在預設(shè)節(jié)點Y0與預設(shè)節(jié)點Y1間的線段截取點C使得S1c= S12,則預設(shè)節(jié)點Y1的切線Q1為pos2- posc的方向向量,并對該切線進行歸一化。若S12>S01,在預設(shè)節(jié)點Y1與預設(shè)節(jié)點Y2間的線段截取點C使得S1c= S01,則預設(shè)節(jié)點1的切線Q1為pos2- posc的方向向量,并對該切線進行歸一化。若S12=S01,則預設(shè)節(jié)點1的切線Q1為pos2- pos0的方向向量,并對該切線進行歸一化。
預設(shè)節(jié)點0的切線Q0為pos1- pos0的方向向量,并對該切線進行歸一化。
預設(shè)節(jié)點i的切線Qi為posi- posi-1的方向向量,并對該切線進行歸一化。
在此,預設(shè)節(jié)點個數(shù)為5,分別為預設(shè)節(jié)點Y0、預設(shè)節(jié)點Y1、預設(shè)節(jié)點Y2、預設(shè)節(jié)點Y3、預設(shè)節(jié)點Y4,則預設(shè)節(jié)點Y4的切線Q4為pos4- pos3的方向向量,并對該切線進行歸一化。
接下來,計算預設(shè)節(jié)點的法線與次法線;
以預設(shè)節(jié)點Y0為例:
求取預設(shè)節(jié)點Y0的歸一化后的切線在x,y,z軸上的最小值,使單位向量(1,0,0)或(0,1,0)或(0,0,1)設(shè)為臨時法線temNormal;即當預設(shè)節(jié)點0的單位切線在x軸方向的絕對值最小則將向量(1,0,0)作為預設(shè)節(jié)點0的臨時法線normal_tem。
通過對預設(shè)節(jié)點Y0的切線Q0與其臨時法線temNormal進行叉積計算,得出其臨時次法線temBinormal:temBinormal = Q0 * temNormal。并對其進行歸一化
計算預設(shè)節(jié)點Y0的法線值為:normals0 = Q0 * temBinormal;
計算預設(shè)節(jié)點Y0的次法線值為:binormals0 = Q0 * normal0;
圖11為預設(shè)節(jié)點的切線、法線以及次法線的示意圖。
其余預設(shè)節(jié)點的法線計算方法為:
A.計算兩個相鄰預設(shè)節(jié)點的切線叉積的值的單位向量vec。
B.計算兩個相鄰預設(shè)節(jié)點的切線間的夾角theta = acos(Qi-1,Qi);
C.獲取預設(shè)節(jié)點Yi的旋轉(zhuǎn)軸矩陣,通過單位向量vec與夾角theta得旋轉(zhuǎn)軸矩陣
tx * x + c, tx * y - s * z ,tx * z + s * y,0
tx * y + s * z , ty * y + c, ty * z - s * x,0
tx * z - s * y ,ty * z + s * x , t * z * z + c ,0
0, 0, 0,1
其中c = cos(theta),s=sin(theta),t=1-c,x=vec.x,y=vec.y,z=vec.z,tx=t*x,ty=t*y。
使用預設(shè)節(jié)點Y(i-1)的單位法線乘以旋轉(zhuǎn)軸矩陣得到預設(shè)節(jié)點Yi的法線,并進行歸一化;
通過預設(shè)節(jié)點Yi的切線與其法線的叉積計算得出預設(shè)節(jié)點Yi的次法線單位向量:具體如下:
預設(shè)節(jié)點的次法線單位向量::binormalsi = Qi* normalsi。
左補點的次法線單位向量:binormals(i-1)1 = Qi1* normals(i-1)1。
左補點的次法線單位向量:binormalsi2= Qi2* normalsi2。
左補點Bi1,右補點Bi2的切線即為預設(shè)節(jié)點Yi與預設(shè)節(jié)點Y(i-1)的向量做差的結(jié)果的歸一化。
左補點Bi1,右補點Bi2的法線與其次法線的計算方法與預設(shè)節(jié)點相同,再次不再贅述。
S104:所述基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標方法為:
基于預設(shè)節(jié)點計算其周圍的待繪制節(jié)點的三維坐標為:
Posi.x = posi.x+cx * pnormali.x + cy * pbinormali.x;
Posi.y = posi.y + cx * pnormali.y + cy * pbinormali.y;
Posi.z = posi.z+ cx * pnormali.z + cy * pbinormali.z;
其中,pnormali為預設(shè)節(jié)點i的法線坐標,pbinormali為預設(shè)節(jié)點i的次法線坐標;
基于左右補點計算其周圍的帶繪制節(jié)點的三維坐標為:
Posi.x = bosi.x+cx * bnormali.x + cy * bbinormali.x;
Posi.y = bosi.y + cx * bnormali.y + cy * bbinormali.y;
Posi.z = bosi.z+ cx * bnormali.z + cy * bbinormali.z;
其中,bnormali為補點i的法線坐標,bbinormali為補點i的次法線坐標;
cx=-R* cos(v);cy=R*sin(v);其中,v = 2PI*j / n,j表示待繪制管道的第j個繪制節(jié)點,n為待繪制管道的多邊形的邊數(shù)。
優(yōu)選地,所述待繪制管道的橫截面包括多邊形。
假設(shè):繪制的管道為四邊形;
則n=4;當j=1時則v=90°;j=2時則v=180°;j=3時則v=270°;j=4時則v=360°,如圖9所示,為本發(fā)明基于預設(shè)節(jié)點Y0計算出的待繪制節(jié)點的分布示意圖,以此類推,全部的繪制節(jié)點效果圖如圖10所示。
S105:基于待繪制節(jié)點的三維坐標繪制三維管道,如圖13所示。
本發(fā)明還給出了一種基于連續(xù)折線形三維管道的系統(tǒng)實施例,如圖2所示,包括:
預設(shè)模塊,用于確定待繪制管道的所有預設(shè)節(jié)點的三維坐標;
第一計算模塊,用于計算待繪制管道的所有預設(shè)節(jié)點的左/右補點的切線的單位向量及三維坐標;
第二計算模塊,用于計算所有預設(shè)節(jié)點與其左/右補點法線、次法線的單位向量;
第三計算模塊,用于基于預設(shè)節(jié)點或其左/右補點計算其周圍的待繪制節(jié)點的三維坐標;
繪制模塊,用于基于待繪制節(jié)點的三維坐標繪制三維管道;
本說明書中方法的實施例采用遞進的方式描述,對于系統(tǒng)的實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。本發(fā)明提出一種基于連續(xù)折現(xiàn)形三維管道的方法及系統(tǒng),根據(jù)預設(shè)路徑上的預設(shè)節(jié)點的三維坐標,選定每個預設(shè)節(jié)點的左補點以及右補點,通過求切線、法線以及次法線來計算出繪三維管道的繪制節(jié)點。通過本發(fā)明,不僅能夠使管道按照預先設(shè)定的路徑進行繪制,不會偏離預設(shè)路徑。解決了現(xiàn)有技術(shù)中折線形三維管道在繪制過程中出現(xiàn)的彎折、管道半徑大小不一,導致管道膨脹或收縮變形的問題;而且繪制的三維管道在通過預設(shè)節(jié)點的折線的拐角連接處能夠閉合,不會出現(xiàn)尖角、斷節(jié)等情況,應(yīng)用到更多的場景,更加真實貼切,達到了良好的視覺效果。
雖然通過實施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。