如圖所示,兩個三角形重合存在很多種情況,上圖舉出其中4個例子,本文要講的是已知兩個三角形三個頂點座標,求重疊部分最大三角形的頂點座標;
雖然已知頂點座標,位置關係已經確定,但是程式設計解決的是一類問題,所以各種情況還是要考慮到。
定義變數儲存結果
double resultx[3];
double resulty[3];
兩個三角形的座標變數
double coordinate-x[3];
double coordinate-y[3];
double coordinate-xx[3];
double coordinate-yy[3];
coordinate-x[0]=x1;//
coordinate-y[0]=y1;
coordinate-x[1]=x2;
coordinate-y[1]=y2;
coordinate-x[2]=x3;
coordinate-y[2]=y3;
coordinate-xx[0]=ppx1;
coordinate-yy[0]=ppy1;
coordinate-xx[1]=ppx2;
coordinate-yy[1]=ppy2;
coordinate-xx[2]=ppx3;
coordinate-yy[2]=ppy3;
第一步做的是判斷有沒有三角形的乙個頂角是否在另乙個三角形內部,如果有那麼這個頂角一定是內部最大三角形的乙個頂點
std::vectornodeposy;
std::vectornodeposx;
//判斷有沒有乙個三角形的頂點在另乙個三角形的內部的情況(根據分析在三角形內部的頂點一定是重疊部分三角形的乙個頂點)
//面積法判斷
//s=(1/2)*|(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)| //s=1/2|x1(y3-y2)+x2(y1-y3)+x3(y2-y1)|
double curs=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));//計算三角形的面積,用的是向量
double pps=abs(ppx1*(ppy2-ppy3)+ppx2*(ppy3-ppy1)+ppx3*(ppy1-ppy2));//計算三角形的面積,用的是向量法
double sall=0.0f;
//當前三角是有有頂點在匹配色域空間中
for (int i=0;i<3;i++)
}if(abs(sall-pps)<0.01f)//面積相等說明在內
sall=0.0f;
} //兩個三角形重合
if (nodeposy.size()==3)
//當前三角是否有頂點在另乙個三角中
sall=0.0f;
for (int j=0;j<3;j++)
}if(abs(sall-curs)<0.01f)//面積相等說明在內
sall=0.0f;
} if (nodeposy.size()>=3)//有三個點在內部的時候,直接認為是公共三角形(不在計算交點)
else
}double curposy=0.0f;
double curposx=0.0f;
for(int i=0;i<3;i++)
}} }
if (nodeposx.size()<3)//計算到這仍然不到三個點說明計算錯誤返回false
第三步.找出面積最大的三角形
std::vectorarea;
std::vectorindex;
double s;
cstring str;
for(int i=0;iss)
}int idx=atof(index[num]);
int anglenum[3];
anglenum[0]=idx/100;
anglenum[1]=idx%100/10;
anglenum[2]=idx%10;
for(int m=0;m<3;m++)
index.clear();
area.clear();
nodeposx.clear();
nodeposy.clear();
return true;
至此最大重疊部分三角形的三個頂點就計算出來了 尋找三角形
三維空間中有n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用 r g b 表示。現在要找出三個點,並組成乙個三角形,使得這個三角形的面積最大。但是三角形必須滿足 三個點的顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正整數n三維座標系內的點的個數.n 50 接下來n行,每...
尋找三角形
尋找三角形 時間限制 1秒 空間限制 32768k 三維空間中有 n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用 r g b 表示。現在要找出三個點,並組成乙個三角形,使得這個三角形的面積最大。但是三角形必須滿足 三個點的顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正...
尋找三角形
三維空間中有n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用r g b表示。現在要找出三個點,並組成乙個三角形,使得三角形的面積最大。三角形必須滿足 三個點顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正整數n n 50 三維座標系內的點的個數。接下來n行,每一行輸入 c...