三角形填充

2021-09-01 01:39:30 字數 1065 閱讀 7994

給定三角形的三個頂點,填充三角形,想來想去,竟然找不到這樣的軟體工具。就連matlab都沒有提供這樣的繪圖功能。我有一組三角形的頂點座標,想判斷這些三角形是否可以完全拼合在一起。如果乙個乙個地去檢查每個三角形的頂點座標,那真不是人幹的活。求人不如求已,乾脆自己寫乙個windows程式吧,利用gdi來填充三角形。

(1)讀取三角形頂點座標

三角形的頂點座標是如此儲存在乙個txt檔案中的:

248 224 242 223 247 221

253 221 245 218 229 218

219 218 253 221 229 218

每行格式為:x0 y0 x1 y1 x2 y2,核心**為:

file* txtfile;

txtfile=fopen(filename,"rt");

int i=0;

while(fscanf(txtfile,"%d %d %d %d %d %d\n",&x0,&y0,&x1,&y1,&x2,&y2)!=eof)

(2)填充三角形的函式

cclientdc dc(this);

cpoint p1(x0,y0), p2(x1,y1), p3(x2,y2);

cpoint points=;

crgn rgn;

rgn.createpolygonrgn(points,3,alternate/*winding*/);//建立區域

cbrush brush;

brush.createsolidbrush(rgb);//建立畫刷

dc.fillrgn(&rgn,&brush);//填充區域

brush.deleteobject();

rgn.deleteobject();

(3)繪製所有三角形

在ondraw()函式中呼叫以下**就可以繪製出所有的三角形了。

三角形填充演算法

這個演算法的精妙之處在於把求斜率的部分改為了插值計算,解決了浮點數的問題。整個部分並沒有直接去求直線的斜率。能用 解釋的盡量不bb,見 private function draw easy p1 point,p2 point,p3 point,color uint 0 void p3.y if p1...

AS3 三角形填充

讓點按照 p1 p2 p3 的y值從大到小排序 var tempx number var tempy number if y1 y2 if y1 y3 if y2 y3 如果所有定點都在裁剪區域外則不能繪圖 if y3 clip.bottom y1 clip.top x1 clip.left x2 ...

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...