當前位置:編程學習大全網 - 編程語言 - 如何用編程做四邊形?

如何用編程做四邊形?

//

//算法描述:

//凸四邊形任壹邊的兩個頂點位於另兩個頂點所在直線的同壹側。

//有兩條邊的凹四邊形的兩個頂點位於另兩個頂點所在直線的兩側。

//四個點(0,1,2,3)組成壹個四邊形有三種可能的序列:0123 0213 0132。

//

#包括

#包括

#定義ESP (1e-6)

double x[4]={0.0},y[4]= { 0.0 };

雙A[6],B[6],C[6];//線性方程Ax+By+C=0

雙D[6],E[6];//D和E存儲另外兩點帶入線性方程的值,其中零表示點在直線上,同號表示在直線的同側。

int pos[6][4]={{0,1,2,3},{0,2,1,3},{0,3,1,2},{1,2,0,3},{1,3,0,2},{2,3,0,1 };//用於數組ABCDEF

char str[6][8]={"0,1,2,3 "," 0,2,1,3 "," 1,2,0,3 "," 1,2,0,3 "," 1,3,0,2 "," 2,3,0,1 " };//用於打印輸出。

void TriangleArea(int a,int b,int c,int d)

{

雙S;

if(((x[a]-x[b])*(x[a]-x[c])& lt;0)| |((y[a]-y[b])*(y[a]-y[c])& lt;0))

{

s = fabs(x[b]* y[c]-y[b]* x[c]+x[c]* y[d]-x[d]* y[c]+x[d]* y[b]-x[b]* y[d]);

Printf("三點(%5.2lf,% 5.2lf) (%5.2lf,% 5.2lf) * *直線,三角形(% 5.2lf,% 5.2lf) (%)

x[a],y[a],x[b],y[b],x[c],y[c],x[b],y[b],x[c],y[c],x[d],y[d],S);

}

else if(((x[b]-x[a])*(x[b]-x[c])& lt;0)| |((y[b]-y[a])*(y[b]-y[c])& lt;0))

{

s = fabs(x[a]* y[c]-y[a]* x[c]+x[c]* y[d]-x[d]* y[c]+x[d]* y[a]-x[a]* y[d]);

Printf("三點(%5.2lf,% 5.2lf) (%5.2lf,% 5.2lf) * *直線,三角形(% 5.2lf,% 5.2lf) (%)

x[a],y[a],x[b],y[b],x[c],y[c],x[a],y[a],x[c],y[c],x[d],y[d],S);

}

else if(((x[c]-x[a])*(x[c]-x[b])& lt;0)| |((y[c]-y[a])*(y[c]-y[b])& lt;0))

{

s = fabs(x[a]* y[c]-y[a]* x[c]+x[c]* y[d]-x[d]* y[c]+x[d]* y[a]-x[a]* y[d]);

Printf("三點(%5.2lf,% 5.2lf) (%5.2lf,% 5.2lf) * *直線,三角形(% 5.2lf,% 5.2lf) (%)

x[a],y[a],x[b],y[b],x[c],y[c],x[a],y[a],x[b],y[b],x[d],y[d],S);

}

}

//凹四邊形

void AoArea01122330()

{

double S = fabs(x[0]* y[1]-x[1]* y[0]+x[1]* y[2]-x[2]* y[3]-x[3]* y[2]+x[3]* y[0]-x[0]* y[3])/2;

Printf("凹四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2 lf)\ n面積s =% lf \

x[0],y[0],x[1],y[1],x[2],y[2],x[3],y[3],S);

}

void AoArea01133220()

{

double S = fabs(x[0]* y[1]-x[1]* y[0]+x[1]* y[3]-x[3]* y[2]-x[2]* y[3]+x[2]* y[0]-x[0]* y[2])/2;

Printf("凹四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2 lf)\ n面積s =% lf \

x[0],y[0],x[1],y[1],x[3],y[3],x[2],y[2],S);

}

void AoArea02211330()

{

double S = fabs(x[0]* y[2]-x[2]* y[0]+x[2]* y[1]-x[1]* y[2]+x[1]* y[3]-x[3]* y[1]+x[3]* y[0]-x[0]* y[3])/2;

Printf("凹四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2 lf)\ n面積s =% lf \

x[0],y[0],x[2],y[2],x[1],y[1],x[3],y[3],S);

}

//凸四邊形

空區域01122330()

{

double S = fabs(x[0]* y[1]-x[1]* y[0]+x[1]* y[2]-x[2]* y[3]-x[3]* y[2]+x[3]* y[0]-x[0]* y[3])/2;

Printf("凸四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ nArea s =% lf \

x[0],y[0],x[1],y[1],x[2],y[2],x[3],y[3],S);

}

空區域01133220()

{

double S = fabs(x[0]* y[1]-x[1]* y[0]+x[1]* y[3]-x[3]* y[2]-x[2]* y[3]+x[2]* y[0]-x[0]* y[2])/2;

Printf("凸四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ nArea s =% lf \

x[0],y[0],x[1],y[1],x[3],y[3],x[2],y[2],S);

}

空區域02211330()

{

double S = fabs(x[0]* y[2]-x[2]* y[0]+x[2]* y[1]-x[1]* y[2]+x[1]* y[3]-x[3]* y[1]+x[3]* y[0]-x[0]* y[3])/2;

Printf("凸四邊形\ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ t (%5.2lf,% 5.2lf) \ nArea s =% lf \

x[0],y[0],x[2],y[2],x[1],y[1],x[3],y[3],S);

}

int CheckInput()

{

//判斷四點輸入不同。

if((fabs(x[0]-x[1])& lt;ESP & amp& ampfabs(y[0]-y[1])& lt;ESP) ||

(fabs(x[0]-x[2])& lt;ESP & amp& ampfabs(y[0]-y[2])& lt;ESP) ||

(fabs(x[0]-x[3])& lt;ESP & amp& ampfabs(y[0]-y[3])& lt;ESP) ||

(fabs(x[1]-x[2])& lt;ESP & amp& ampfabs(y[1]-y[2])& lt;ESP) ||

(fabs(x[1]-x[3])& lt;ESP & amp& ampfabs(y[1]-y[3])& lt;ESP) ||

(fabs(x[2]-x[3])& lt;ESP & amp& ampfabs(y[2]-y[3])& lt;ESP))

返回0;

返回1;

}

//判斷是否是凸四邊形0123。

int Check01122330(雙*D,雙*E)

{

if(D[0]* E[0]& gt;0 & amp& ampD[2]*E[2]>0 & amp& ampD[3]*E[3]>0 & amp& ampD[5]*E[5]>0)

返回1;

其他

返回0;

}

//判斷是否是凸四邊形0132。

int Check01133220(雙*D,雙*E)

{

if(D[0]* E[0]& gt;0 & amp& ampD[1]*E[1]>0 & amp& ampD[4]*E[4]>0 & amp& ampD[5]*E[5]>0)

返回1;

其他

返回0;

}

//判斷是否是凸四邊形0213。

int Check02211330(雙*D,雙*E)

{

if(D[1]*E[1]>0 & amp& ampD[2]*E[2]>0 & amp& ampD[3]*E[3]>0 & amp& ampD[4]*E[4]>0)

返回1;

其他

返回0;

}

void Calculate(int p,double *A,double *B,double *C,double *D,double *E)

{

int p 1 = pos[p][0];

int p2 = pos[p][1];

int P3 = pos[p][2];

int P4 = pos[p][3];

if(fabs(y[p2]-y[p 1])& lt;ESP)

{

* A = 0.0

* B = 1.0;

* C =-y[p 1];

}

else if(fabs(x[p2]-x[p 1])& lt;ESP)

{

* A = 1.0;

* B = 0.0

* C =-x[p 1];

}

其他

{

double t =(x[p2]-x[p 1])/(y[p2]-y[p 1]);

* A = 1.0;

* B =-t;

* C = t * y[p 1]-x[p 1];

}

* D = * A * x[P3]+* B * y[P3]+* C;

* E = * A * x[P4]+* B * y[P4]+* C;

}

int main()

{

雙t;

int i,ii;

{

for(I = 0;我& lt4;i++)

{

printf("請輸入點%d(x,y):",I+1);

scanf("%lf,%lf ",& ampx[i],& ampy[I]);

}

} while(check input()= = 0);//檢查是否輸入了四個不同的點。

for(I = 0;我& lt6;i++)

{

計算(我,& ampA[i],& ampB[i],& ampC[i],& ampD[i],& ampe[I]);

printf("(% s)\ tA = % 5.2 lf \ tB = % 5.2 lf \ tC = % 5.2 lf \ tD = % 5.2 lf \ tE = % 5.2 lf \ n ",str[i],A[i],B[i],C[i],D[i],E[I]);

}

//判斷4點* * *線

if(fabs(D[0])& lt;ESP & amp& ampfabs(E[0])& lt;ESP)

{

Printf("四點* * *零面積線\ n ");

返回0;

}

//判斷三分線* * *線

if(fabs(D[0])& lt;ESP)

{

//0,1,2三點式* * *線

TriangleArea(0,1,2,3);

返回0;

}

else if(fabs(E[0])& lt;ESP)

{

//0,1,3三點式* * *線

TriangleArea(0,1,3,2);

返回0;

}

else if(fabs(E[1])& lt;ESP)

{

//0,2,3三點式* * *線

TriangleArea(0,2,3,1);

返回0;

}

else if(fabs(E[3])& lt;ESP)

{

//1,2,3三點式* * *線

三角形面積(1,2,3,0);

返回0;

}

//四邊形

if(Check01122330(D,E)= = 0 & amp;& ampCheck01133220(D,E)==0。& ampCheck02211330(D,E)==0)

{

//凹四邊形

aoarea 01122330();

aoarea 01133220();

aoarea 02211330();

}

else if(check 01122330(D,E)==1)

{

//凸四邊形

area 01122330();

}

else if(check 01133220(D,E)==1)

{

//凸四邊形

area 01133220();

}

else if(check 02211330(D,E)==1)

{

//凸四邊形

area 02211330();

}

返回0;

}

  • 上一篇:如何系統地自學Python?
  • 下一篇:MAPLE畫三維圖象
  • copyright 2024編程學習大全網