本研究選擇用 Turbo C 語言撰寫程式來計算圓內任意兩弦之交點數,
再透過 Euler 公式計算分割的區域數。
首先說明程式內一些變數之意義。
1.H[k][p],H1[k][p]:表示圓上正 n 邊形之一頂點 A 至圓心的半徑上(頂 點 A 置於圓之正下方),頂點 A 左側第 k 個頂點至右側第(k+p)個頂 點相連接之弦與頂點 A 右側第 k 個頂點至左側第(k+p)個頂點相連 接之弦的交點至頂點 A 左右兩側第一個頂點連線的距離。
2.HM[k][p]:表示圓上正 n 邊形上相鄰兩頂點之中心點 A 至圓心的半徑上
(中心點 A 置於圓之正下方),中心點 A 左側第 k 個頂點至右側第(k
+p)個頂點相連接之弦與中心點 A 右側第 k 個頂點至左側第(k+p)
個頂點相連接之弦的交點至中心點左右兩側第一個頂點相連接之弦的 距離。
3.D[k][p]:表示圓上正 n 邊形之一頂點 A 至圓心的半徑上(頂點 A 置於 圓之正下方),頂點 A 左側第 k 個頂點至右側第(k+p)個頂點相連接 之弦與頂點 A 右側第 k 個頂點至左側第(k+p)個頂點相連接之弦的交 點之相交弦數。
4.DM[k][p]:表示圓上正 n 邊形上相鄰兩頂點之中心點 A 至圓心的半徑上
(中心點 A 置於圓之正下方),中心點 A 左側第 k 個頂點至右側第(k
+p)個頂點相連接之弦與中心點 A 右側第 k 個頂點至左側第(k+p)
個頂點相連接之弦的交點之相交弦數。
5.HMD[2700],HMD1[2700]:用來儲存計算圓上正 n 邊形上相鄰兩頂點至圓 心的區域內(相鄰兩頂點之中心點 A 至於圓之正下方),左側頂點至該 頂點水平線以上右側頂點之任意弦與右側頂點至該頂點水平線以上左
側頂點之任意弦的交點屬性(包含交點之相交兩弦的屬性、交點至該相 鄰兩頂點連線的距離、交點的相交弦數)(該點如位在該相鄰兩頂點之 中心點至圓心的半徑上,則予以扣除)。
6.struct {
LK:用來儲存中心點 A 之左側頂點 k 值。
LP:用來儲存左側頂點 k 之水平線以上右側的第 p 個頂點之 p 值。
RK:用來儲存中心點 A 之右側頂點 k1 值。
RP:用來儲存右側頂點 k1 之水平線以上左側的第 q 個頂點之 q 值。
HT:用來儲存圓上正 n 邊形上相鄰兩頂點至圓心的區域內,左側頂點 至該頂點水平線以上右側頂點之任意弦與右側頂點至該頂點水 平線以上左側頂點之任意弦的交點至中心點 A 左右兩側第一個頂 點相連接之弦的距離。
DT:用來儲存圓上正 n 邊形上相鄰兩頂點至圓心的區域內,左側頂點 至該頂點水平線以上右側頂點之任意弦與右側頂點至該頂點水 平線以上左側頂點之任意弦的交點之相交弦數。
} HMD[2700],HMD1[2700]
7.HMDL[2700],HMDL1[2700]:用來儲存正 n 邊形上相鄰兩頂點至圓心的區 域內,兩條左側頂點至該頂點水平線以上右側頂點之任意弦的交點屬性
(包含交點之相交兩弦的屬性、交點至該相鄰兩頂點連線的距離、交點 的相交弦數)(該點如位在該相鄰兩頂點之中心點至圓心的半徑上或符 合 HMD[2700] 之交點屬性,則予以扣除)。
8.struct {
LK2:用來儲存中心點 A 之左側頂點 j 值。
LK1:用來儲存中心點 A 之左側頂點 k 值。
LP1:用來儲存左側頂點 k 之水平線以上右側的第 p 個頂點之 p 值。
HT:用來儲存正 n 邊形上相鄰兩頂點至圓心的區域內,兩條左側頂點 至該頂點水平線以上右側頂點之任意弦的交點至中心點 A 左右兩 側第一個頂點相連接之弦的距離。
DT:用來儲存正 n 邊形上相鄰兩頂點至圓心的區域內,兩條左側頂點 至該頂點水平線以上右側頂點之任意弦的交點之相交弦數。
} HMDL[2700],HMDL1[2700]
9.num1:用來儲存圓上正 n 邊形之頂點至圓心的半徑上,任意兩弦的交點 數。
10.num2:用來儲存圓上正 n 邊形上任意相鄰兩頂點之中心點至圓心的半 徑上,任意兩弦的交點數。
11.num3:用來儲存圓上正 n 邊形上任意相鄰兩頂點至圓心的區域內,該 相鄰兩頂點連線之任意水平線與左側頂點至該頂點水平線以上右側頂 點之任意弦及右側頂點至該頂點水平線以上左側頂點之任意弦的交點 數(該點如位於該相鄰兩頂點之中心點至圓心的半徑上或符合 num4、
num5 之性質,則予以扣除)。
12.num4:用來儲存圓上正 n 邊形上任意相鄰兩頂點至圓心的區域內,左 側頂點至該頂點水平線以上右側頂點之任意弦與右側頂點至該頂點水 平線以上左側頂點之任意弦的交點數(該點如位於該相鄰兩頂點之中 心點至圓心的半徑上,則予以扣除)。
13.num5:用來儲存圓上正 n 邊形上任意相鄰兩頂點至圓心的區域內,兩 條左側頂點至該頂點水平線以上右側頂點之任意弦的交點數(該點如 位於該相鄰兩頂點之中心點至圓心的半徑上或符合 num4 之性質,則予 以扣除)。
14.Line[i]:用來儲存圓內 i 條弦相交於一點之點數。
15.x:令 x 等於 n。
16.k,p,r,q,k1,k2,q1,j,r1,j1:圓上某一頂點。
一、圓內接正奇數 n 邊形,圓上 n 個點互相連接之分割區域數
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main() {
int n,k,p,r,q,k1,k2,q1,j,r1,j1,z,z1,v,i,m,ti,x1,m1,m2,m3,m4,s;
int mark1,mark2,num1,num2,num3,num4,num5,i_num1,i_num2,i_num3;
long I_SUM;
float I_MAX,AREA,x,test,y;
int D[50][100],DM[50][100];
int min_num(int,int);
float H[50][100],H1[50][100],HM[50][100];
struct {
int LK;
int LP;
int RK;
int RP;
float HT;
int DT;
} HMD[2700],HMD1[2700];
struct {
int LK2;
int LP2;
int LK1;
int LP1;
float HT;
int DT;
} HMDL[2700],HMDL1[2700];
printf("\n\nEnter a odd number : ");
scanf("%d",&n);
float Line[50]={0};
x=n;
num1=0;
num2=0;
num3=0;
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-2*k;p++) {
H[k][p]=sin(k*2*M_PI/x)*tan(p*M_PI/x)+
cos(2*M_PI/x)-cos(k*2*M_PI/x);
D[k][p]=2;
num1++;
}
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-2*k;p++) H1[k][p]=H[k][p];
// printf("num1 = %d\n",num1);
for (k=2;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-2*k;p++) for (r=1;r<=k-1;r++)
for (q=1;q<=(n-1)/2-2*r;q++)
if ((H[k][p]!=0)&&(H[k][p]==H[r][q])) {
D[r][q]+=2;
D[k][p]=0;
H[k][p]=0;
num1--;
}
for (s=2;s<=(int)((n-1)/4);s++) for (k=1;k<=s-1;k++)
for (p=1;p<=(n-1)/2-2*k;p++)
if (H1[k][p]==cos(2*M_PI/x)-cos(s*2*M_PI/x)) if (H[k][p]!=0)
D[k][p]++;
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-2*k;p++) for (i=2;i<=(n-1)/2;i++)
if (D[k][p]==i) Line[i]+=n;
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) {
HM[k][p]=sin((2*k-1)*M_PI/x)*tan(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
DM[k][p]=2;
num2++;
}
// printf("num2 = %d\n",num2);
for (k=2;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) for (r=1;r<=k-1;r++)
for (q=1;q<=(n-1)/2-(2*r-1);q++)
if ((HM[k][p]!=0)&&(HM[k][p]==HM[r][q])) {
DM[r][q]+=2;
HM[k][p]=0;
DM[k][p]=0;
}
for (s=2;s<=(int)((n+1)/4);s++) for (k=1;k<=s-1;k++)
for (p=1;p<=(n-1)/2-(2*k-1);p++)
if (HM[k][p]==cos(M_PI/x)-cos((2*s-1)*M_PI/x)) DM[k][p]++;
for (i=2;i<=(n-1)/2;i++)
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++)
if (DM[k][p]==i) Line[i]+=n;
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-2*k;p++)
H[k][p]=sin(k*2*M_PI/x)*tan(p*M_PI/x)+
cos(2*M_PI/x)-cos(k*2*M_PI/x);
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++)
HM[k][p]=sin((2*k-1)*M_PI/x)*tan(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
for (p=1;p<=(n-1)/2;p++) H[0][p]=-1;
for (k=1;k<=(int)((n-1)/4);k++)
H[k][0]=cos(2*M_PI/x)-cos(k*2*M_PI/x);
num4=0;
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) {
v=min_num(k+p-1,(int)((n-1)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if (z<0) z=0;
for (q=1+z;q<=(n-1)/2-(2*k1-1);q++)
if ((H[k-1][p+1]<H[k1][q-1])&&(H[k][p-1]>H[k1-1][q+1])) {
num4++;
HMD[num4].LK=k;
HMD[num4].LP=p;
HMD[num4].RK=k1;
HMD[num4].RP=q;
HMD[num4].HT=sin((q+k1-k)*M_PI/x)*sin(p*M_PI/x)/
sin(M_PI-(p+q)*M_PI/x)*
(2*sin((k+k1-1)*M_PI/x))+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
if ((HMD[num4].HT==HM[k][p])||((k==k1)&&(p==q))) num4--;
else
HMD[num4].DT=2;
} } }
for (i=1;i<=num4;i++) {
HMD1[i].LK=HMD[i].LK;
HMD1[i].LP=HMD[i].LP;
HMD1[i].RK=HMD[i].RK;
HMD1[i].RP=HMD[i].RP;
HMD1[i].HT=HMD[i].HT;
HMD1[i].DT=HMD[i].DT;
}
num5=0;
for (j=2;j<=(int)((n-1)/4);j++) for (r=1;r<=(n-1)/2-(2*j-1);r++) for (k=1;k<=j-1;k++)
for (p=1;p<=(n-1)/2-(2*k-1);p++)
if ((H[j-1][r+1]>H[k-1][p+1])&&(H[j][r-1]<H[k][p-1])) {
num5++;
HMDL[num5].LK2=j;
HMDL[num5].LP2=r;
HMDL[num5].LK1=k;
HMDL[num5].LP1=p;
HMDL[num5].HT=sin((r+2*j-1-(j-k))*M_PI/x)/
sin((p-r)*M_PI/x)*
2*sin((j-k)*M_PI/x)*sin(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
if (HMDL[num5].HT==HM[k][p]) num5--;
else
HMDL[num5].DT=2;
}
for (i=1;i<=num5;i++) {
HMDL1[i].LK2=HMDL[i].LK2;
HMDL1[i].LP2=HMDL[i].LP2;
HMDL1[i].LK1=HMDL[i].LK1;
HMDL1[i].LP1=HMDL[i].LP1;
HMDL1[i].HT=HMDL[i].HT;
HMDL1[i].DT=HMDL[i].DT;
}
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) {
v=min_num(k+p-1,(int)((n-1)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if ( z<0 ) z=0;
for (q=1+z;q<=(n-1)/2-(2*k1-1);q++) {
for (i=1;i<=num4;i++) if (HMD[i].LK==k) if (HMD[i].LP==p)
if (HMD[i].RK==k1) if (HMD[i].RP==q) i_num1=i;
for (k2=k1+1;k2<=v;k2++) {
z1=k-k2;
if (z1<0) z1=0;
for (q1=1+z1;q1<=(n-1)/2-(2*k2-1);q1++) {
for (i=1;i<=num4;i++) if (HMD[i].LK==k) if (HMD[i].LP==p) if (HMD[i].RK==k2) if (HMD[i].RP==q1)
i_num2=i;
if ((i_num1!=i_num2)&&
(HMD[i_num1].LK==HMD[i_num2].LK)&&
(HMD[i_num1].LP==HMD[i_num2].LP)) if ((HMD[i_num2].HT!=0)&&
(HMD[i_num2].HT==HMD[i_num1].HT)) {
HMD[i_num1].DT++;
HMD[i_num2].HT=0;
HMD[i_num2].DT=0;
} }
}
for (j=k+1;j<=(int)((n-1)/4);j++) for (r=1;r<=(n-1)/2-(2*j-1);r++) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j) if (HMDL[i].LP2==r) if (HMDL[i].LK1==k) if (HMDL[i].LP1==p)
i_num3=i;
if ((HMD[i_num1].LK==HMDL[i_num3].LK1)&&
(HMD[i_num1].LP==HMDL[i_num3].LP1)) if ((HMDL[i_num3].HT!=0)&&
(HMDL[i_num3].HT==HMD[i_num1].HT)) {
HMD[i_num1].DT++;
HMDL[i_num3].HT=0;
HMDL[i_num3].DT=0;
for (m1=1;m1<=num4;m1++)
if ((HMD1[m1].LK==k)&&(HMD1[m1].LP==p)) if (HMD1[m1].HT==HMD[i_num1].HT)
for (m2=1;m2<=num4;m2++)
if ((HMD[m2].LK==j)&&(HMD[m2].LP==r)) if ((HMD[m2].RK==HMD1[m1].RK)&&
(HMD[m2].RP==HMD1[m1].RP)) if (HMD1[m2].HT==HMD1[m1].HT) {
HMD[m2].HT=0;
HMD[m2].DT=0;
}
for (m3=1;m3<=num5;m3++)
if ((HMDL1[m3].LK1==k)&&(HMDL1[m3].LP1==p)) if ((HMDL1[m3].LK2<j)&&
(HMDL1[m3].HT==HMDL1[i_num3].HT)) for (m4=1;m4<=num5;m4++)
if (HMDL1[m4].LK2==j) if (HMDL1[m4].LP2==r)
if (HMDL1[m4].LK1==HMDL1[m3].LK2)
if (HMDL1[m4].LP1==
HMDL1[m3].LP2)
if (HMDL1[m4].HT==HMDL1[m3].HT)
{
HMDL[m4].HT=0;
HMDL[m4].DT=0;
}
} }
} } }
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) for (j=k+1;j<=(int)((n-1)/4);j++)
for (r=1;r<=(n-1)/2-(2*j-1);r++) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j) if (HMDL[i].LP2==r)
if (HMDL[i].LK1==k) if (HMDL[i].LP1==p) i_num1=i;
for (j1=j+1;j1<=(int)((n-1)/4);j1++) for (r1=1;r1<=(n-1)/2-(2*j1-1);r1++) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j1) if (HMDL[i].LP2==r1) if (HMDL[i].LK1==k)
if (HMDL[i].LP1==p) i_num2=i;
if ((i_num1!=i_num2)&&
(HMDL[i_num1].LK1==HMDL[i_num2].LK1)&&
(HMDL[i_num1].LP1==HMDL[i_num2].LP1)) if ((HMDL[i_num2].HT!=0)&&
(HMDL[i_num2].HT==HMDL[i_num1].HT)) {
HMDL[i_num1].DT++;
HMDL[i_num2].HT=0;
HMDL[i_num2].DT=0;
for (m3=1;m3<=num5;m3++)
if ((HMDL1[m3].LK1==k)&&(HMDL1[m3].LP1==p)) if ((HMDL1[m3].LK2<j1)&&
(HMDL1[m3].HT==HMDL1[i_num2].HT)) for (m4=1;m4<=num5;m4++)
if (HMDL1[m4].LK2==j1) if (HMDL1[m4].LP2==r1)
if (HMDL1[m4].LK1==HMDL1[m3].LK2) if (HMDL1[m4].LP1==
HMDL1[m3].LP2) {
HMDL[m4].HT=0;
HMDL[m4].DT=0;
} }
} }
for (k=1;k<=(int)((n-1)/4);k++) for (p=1;p<=(n-1)/2-(2*k-1);p++) for (s=2;s<=(int)((n+1)/4);s++) {
mark1=0;
mark2=0;
if ((H[s-1][1]>H[k-1][p+1])&&(H[s-1][1]<H[k][p-1])) {
v=min_num(k+p-1,(int)((n-1)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if (z<0) z=0;
for (q=1+z;q<=(n-1)/2-(2*k1-1);q++) {
for (ti=1;ti<=num4;ti++) if (HMD[ti].LK==k)
if (HMD[ti].LP==p) if (HMD[ti].RK==k1) if (HMD[ti].RP==q)
i_num1=ti;
if (HMD1[i_num1].HT==
cos(M_PI/x)-cos((2*s-1)*M_PI/x)) {
if (HMD[i_num1].HT!=0) HMD[i_num1].DT++;
mark1=1;
} } }
for (j=k+1;j<=(int)((n-1)/4);j++) for (r=1;r<=(n-1)/2-(2*j-1);r++) {
for (ti=1;ti<=num5;ti++) if (HMDL[ti].LK2==j) if (HMDL[ti].LP2==r) if (HMDL[ti].LK1==k) if (HMDL[ti].LP1==p)
i_num2=ti;
if (HMDL1[i_num2].HT==
cos(M_PI/x)-cos((2*s-1)*M_PI/x)) {
if (HMDL[i_num2].HT!=0) HMDL[i_num2].DT++;
mark2=1;
} }
if ((mark1==0)&&(mark2==0)) {
Line[2]+=2*n;
num3+=2;
} } }
// printf("num3= %d\n",num3);
// printf("num4= %d\n",num4);
// printf("num5= %d\n",num5);
for (i=2;i<=n/2;i++) {
for (ti=1;ti<=num4;ti++) if (HMD[ti].DT==i)
Line[i]+=n;
for (ti=1;ti<=num5;ti++) if (HMDL[ti].DT==i)
Line[i]+=2*n;
}
for (i=2;i<=n/2;i++)
printf("Line[%d]=%.0f\n",i,Line[i]);
I_MAX=1+x*(x-1)/2+x*(x-1)/2*(x-2)/3*(x-3)/4;
printf("The MAX number of %d = %.0f\n",n,(double)I_MAX);
printf("\nBy Euler formula\n");
I_SUM=0;
for (i=2;i<=n/2;i++) I_SUM+=(i-1)*Line[i];
AREA=1+I_SUM+n*(n-1)/(1*2);
printf("The AREA number of %d = %.0f\n",n,(double)AREA);
}
int min_num(int num_a,int num_b) {
int num_c;
num_c=num_a;
if (num_a>num_b) num_c=num_b;
return (num_c);
}
二、圓內接正偶數 n 邊形,圓上 n 個點互相連接之分割區域數
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main() {
int n,k,p,r,q,k1,k2,q1,j,r1,j1,z,z1;
int v,i,m,ti,x1,M,m1,m2,m3,m4,m5,s;
int mark1,mark2,num1,num2,num3,num4,num5,i_num1,i_num2,i_num3;
long I_SUM;
float I_MAX,AREA,x,test,y,h;
int D[50][100],DM[50][100];
int min_num(int,int);
float H[50][100],H1[50][100],HM[50][100];
struct {
int LK;
int LP;
int RK;
int RP;
float HT;
int DT;
} HMD[2700],HMD1[2700];
struct {
int LK2;
int LP2;
int LK1;
int LP1;
float HT;
int DT;
} HMDL[2700],HMDL1[2700];
printf("\n\nEnter a even number : ");
scanf("%d",&n);
float Line[50]={0};
x=n;
I_MAX=1+x*(x-1)/2+x*(x-1)/2*(x-2)/3*(x-3)/4;
printf("The MAX number of %d = %.0f\n",n,(double)I_MAX);
num1=0;
num2=0;
num3=0;
for (k=1;k<=(int)((n-4)/4);k++) for (p=1;p<=(n-2)/2-2*k;p++) {
H[k][p]=sin(k*2*M_PI/x)*tan(p*M_PI/x)+
cos(2*M_PI/x)-cos(k*2*M_PI/x);
D[k][p]=3;
num1++;
}
for (k=1;k<=(int)((n-4)/4);k++) for (p=1;p<=(n-2)/2-2*k;p++) H1[k][p]=H[k][p];
// printf("num1-1 = %d\n",num1);
for (k=2;k<=(int)((n-4)/4);k++) for (p=1;p<=(n-2)/2-2*k;p++) for (r=1;r<=k-1;r++)
for (q=1;q<=(n-2)/2-2*r;q++)
if ((H[k][p]!=0)&&(H[k][p]==H[r][q])) {
D[r][q]+=2;
D[k][p]=0;
H[k][p]=0;
num1--;
}
// printf("num1-2 = %d\n",num1);
Line[n/2]=1;
if (n>4) Line[2]+=n;
num1++;
for (s=2;s<=(int)((n-2)/4);s++) {
M=0;
for (k=1;k<=s-1;k++)
for (p=1;p<=(n-2)/2-2*k;p++)
if (H1[k][p]==cos(2*M_PI/x)-cos(s*2*M_PI/x))
{
if (H[k][p]!=0) D[k][p]++;
M=1;
} if (M==0) {
Line[2]+=n;
num1++;
} }
// printf("num1 = %d\n",num1);
for (k=1;k<=(int)((n-4)/4);k++) for (p=1;p<=(n-2)/2-2*k;p++) for (i=3;i<=n/2-1;i++)
if (D[k][p]==i) Line[i]+=n;
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) {
HM[k][p]=sin((2*k-1)*M_PI/x)*tan(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
DM[k][p]=2;
num2++;
}
// printf("num2_1 = %d\n",num2);
for (k=2;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) for (r=1;r<=k-1;r++)
for (q=1;q<=(n-2)/2-(2*r-1);q++)
if ((HM[k][p]!=0)&&(HM[k][p]==HM[r][q])) {
DM[r][q]+=2;
HM[k][p]=0;
DM[k][p]=0;
num2--;
}
// printf("num2 = %d\n",num2);
for (s=2;s<=(int)(n/4);s++) for (k=1;k<=s-1;k++)
for (p=1;p<=(n-2)/2-(2*k-1);p++)
if (HM[k][p]==cos(M_PI/x)-cos((2*s-1)*M_PI/x)) DM[k][p]++;
for (i=2;i<=n/2-1;i++)
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++)
if (DM[k][p]==i) Line[i]+=n;
for (k=1;k<=(int)((n-4)/4);k++) for (p=1;p<=(n-2)/2-2*k;p++)
H[k][p]=sin(k*2*M_PI/x)*tan(p*M_PI/x)+
cos(2*M_PI/x)-cos(k*2*M_PI/x);
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++)
HM[k][p]=sin((2*k-1)*M_PI/x)*tan(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
for (p=1;p<=n/2;p++) H[0][p]=-1;
for (k=1;k<=(int)((n-2)/4);k++)
H[k][0]=cos(2*M_PI/x)-cos(k*2*M_PI/x);
num4=0;
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) {
v=min_num(k+p-1,(int)((n-2)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if (z<0) z=0;
for (q=1+z;q<=(n-2)/2-(2*k1-1);q++) if ((H[k-1][p+1]<H[k1][q-1])&&
(H[k][p-1]>H[k1-1][q+1])) {
num4++;
HMD[num4].LK=k;
HMD[num4].LP=p;
HMD[num4].RK=k1;
HMD[num4].RP=q;
HMD[num4].HT=sin((q+k1-k)*M_PI/x)*sin(p*M_PI/x)/
sin(M_PI-(p-(k1-k))*M_PI/x-(q+k1-k)*M_PI/x)*
(2*sin((k+k1-1)*M_PI/x))+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
if ((HMD[num4].HT==HM[k][p])||((k==k1)&&(p==q))) num4--;
else
HMD[num4].DT=2;
} } }
for (i=1;i<=num4;i++) {
HMD1[i].LK=HMD[i].LK;
HMD1[i].LP=HMD[i].LP;
HMD1[i].RK=HMD[i].RK;
HMD1[i].RP=HMD[i].RP;
HMD1[i].HT=HMD[i].HT;
HMD1[i].DT=HMD[i].DT;
}
num5=0;
for (j=2;j<=(int)((n-2)/4);j++) for (r=1;r<=(n-2)/2-(2*j-1);r++) for (k=1;k<=j-1;k++)
for (p=1;p<=(n-2)/2-(2*k-1);p++)
if ((H[j-1][r+1]>H[k-1][p+1])&&(H[j][r-1]<H[k][p-1])) {
num5++;
HMDL[num5].LK2=j;
HMDL[num5].LP2=r;
HMDL[num5].LK1=k;
HMDL[num5].LP1=p;
HMDL[num5].HT=sin((r+2*j-1-(j-k))*M_PI/x)/
sin((p-r)*M_PI/x)*
2*sin((j-k)*M_PI/x)*sin(p*M_PI/x)+
cos(M_PI/x)-cos((2*k-1)*M_PI/x);
if (HMDL[num5].HT==HM[k][p]) num5--;
else
HMDL[num5].DT=2;
}
for (i=1;i<=num5;i++) {
HMDL1[i].LK2=HMDL[i].LK2;
HMDL1[i].LP2=HMDL[i].LP2;
HMDL1[i].LK1=HMDL[i].LK1;
HMDL1[i].LP1=HMDL[i].LP1;
HMDL1[i].HT=HMDL[i].HT;
HMDL1[i].DT=HMDL[i].DT;
}
// printf("num4_1= %d\n",num4);
// printf("num5_1= %d\n",num5);
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) {
v=min_num(k+p-1,(int)((n-2)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if ( z<0 ) z=0;
for (q=1+z;q<=(n-2)/2-(2*k1-1);q++) {
if ((H[k-1][p+1]<H[k1][q-1])&&
(H[k][p-1]>H[k1-1][q+1])) {
for (i=1;i<=num4;i++) if (HMD[i].LK==k) if (HMD[i].LP==p) if (HMD[i].RK==k1) if (HMD[i].RP==q) i_num1=i;
for (k2=k1+1;k2<=v;k2++)
{
z1=k-k2;
if (z1<0) z1=0;
for (q1=1+z1;q1<=(n-2)/2-(2*k2-1);q1++) {
if ((H[k-1][p+1]<H[k2][q1-1])&&
(H[k][p-1]>H[k2-1][q1+1])) {
for (i=1;i<=num4;i++) if (HMD[i].LK==k) if (HMD[i].LP==p) if (HMD[i].RK==k2) if (HMD[i].RP==q1) i_num2=i;
if ((i_num1!=i_num2)&&
(HMD[i_num1].LK==HMD[i_num2].LK)&&
(HMD[i_num1].LP==HMD[i_num2].LP)) {
if ((HMD[i_num2].HT!=0)&&
(HMD1[i_num2].HT==HMD1[i_num1].HT)) {
HMD[i_num1].DT++;
HMD[i_num2].HT=0;
HMD[i_num2].DT=0;
} } } } }
for (j=k+1;j<=(int)((n-2)/4);j++) for (r=1;r<=(n-2)/2-(2*j-1);r++) {
if ((H[j-1][r+1]>H[k-1][p+1])&&
(H[j][r-1]<H[k][p-1])) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j)
if (HMDL[i].LP2==r) if (HMDL[i].LK1==k) if (HMDL[i].LP1==p) i_num3=i;
if ((HMD[i_num1].LK==HMDL[i_num3].LK1)&&
(HMD[i_num1].LP==HMDL[i_num3].LP1)&&
(HMDL[i_num3].LK2==j)) if ((HMDL[i_num3].HT!=0)&&
(HMDL[i_num3].HT==HMD[i_num1].HT)) {
HMD[i_num1].DT++;
HMDL[i_num3].HT=0;
HMDL[i_num3].DT=0;
for (m1=1;m1<=num4;m1++)
if ((HMD1[m1].LK==k)&&(HMD1[m1].LP==p)) if (HMD1[m1].HT==HMD[i_num1].HT)
for (m2=1;m2<=num4;m2++) if ((HMD[m2].LK==j)&&
(HMD[m2].LP==r))
if ((HMD[m2].RK==HMD1[m1].RK)&&
(HMD[m2].RP==HMD1[m1].RP)) if (HMD1[m2].HT==HMD1[m1].HT) {
HMD[m2].HT=0;
HMD[m2].DT=0;
}
for (m3=1;m3<=num5;m3++) if ((HMDL1[m3].LK1==k)&&
(HMDL1[m3].LP1==p)) if ((HMDL1[m3].LK2<j)&&
(HMDL1[m3].HT==HMDL1[i_num3].HT)) {
for (m4=1;m4<=num5;m4++) if (HMDL1[m4].LK2==j) if (HMDL1[m4].LP2==r) if (HMDL1[m4].LK1==
HMDL1[m3].LK2) if (HMDL1[m4].LP1==
HMDL1[m3].LP2) if (HMDL1[m4].HT==
HMDL1[m3].HT) {
HMDL[m4].HT=0;
HMDL[m4].DT=0;
} }
} } } } } } }
// printf("num5_2= %d\n",num5);
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) for (j=k+1;j<=(int)((n-2)/4);j++)
for (r=1;r<=(n-2)/2-(2*j-1);r++) {
if ((H[j-1][r+1]>H[k-1][p+1])&&(H[j][r-1]<H[k][p-1])) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j) if (HMDL[i].LP2==r) if (HMDL[i].LK1==k) if (HMDL[i].LP1==p) i_num1=i;
for (j1=j+1;j1<=(int)((n-2)/4);j1++) for (r1=1;r1<=(n-2)/2-(2*j1-1);r1++) {
if ((H[j1-1][r1+1]>H[k-1][p+1])&&
(H[j1][r1-1]<H[k][p-1])) {
for (i=1;i<=num5;i++) if (HMDL[i].LK2==j1) if (HMDL[i].LP2==r1)
if (HMDL[i].LK1==k) if (HMDL[i].LP1==p) i_num2=i;
if ((i_num1!=i_num2)&&
(HMDL[i_num1].LK1==HMDL[i _num2].LK1)&&
(HMDL[i_num1].LP1==HMDL[i_num2].LP1)) if ((HMDL[i_num2].HT!=0)&&
(HMDL[i_num2].HT==HMDL[i_num1].HT)) {
HMDL[i_num1].DT++;
HMDL[i_num2].HT=0;
HMDL[i_num2].DT=0;
for (m3=1;m3<=num5;m3++) if ((HMDL1[m3].LK1==k)&&
(HMDL1[m3].LP1==p)) if ((HMDL1[m3].LK2<j1)&&
(HMDL1[m3].HT==HMDL1[i_num2].HT)) for (m4=1;m4<=num5;m4++)
if (HMDL1[m4].LK2==j1) if (HMDL1[m4].LP2==r1) if (HMDL1[m4].LK1==
HMDL1[m3].LK2) if (HMDL1[m4].LP1==
HMDL1[m3].LP2) {
HMDL[m4].HT=0;
HMDL[m4].DT=0;
} }
} } } }
// printf("num5_3= %d\n",num5);
for (k=1;k<=(int)((n-2)/4);k++) for (p=1;p<=(n-2)/2-(2*k-1);p++) for (s=2;s<=(int)(n/4);s++) {
mark1=0;
mark2=0;
if ((H[s-1][1]>H[k-1][p+1])&&(H[s-1][1]<H[k][p-1])) {
v=min_num(k+p-1,(int)((n-2)/4));
for (k1=1;k1<=v;k1++) {
z=k-k1;
if (z<0) z=0;
for (q=1+z;q<=(n-2)/2-(2*k1-1);q++) {
for (ti=1;ti<=num4;ti++) if (HMD[ti].LK==k) if (HMD[ti].LP==p) if (HMD[ti].RK==k1) if (HMD[ti].RP==q)
i_num1=ti;
if (HMD1[i_num1].HT==
cos(M_PI/x)-cos((2*s-1)*M_PI/x)) {
if (HMD[i_num1].HT!=0) HMD[i_num1].DT++;
mark1=1;
} } }
for (j=k+1;j<=(int)((n-2)/4);j++) for (r=1;r<=(n-2)/2-(2*j-1);r++) {
for (ti=1;ti<=num5;ti++) if (HMDL[ti].LK2==j) if (HMDL[ti].LP2==r) if (HMDL[ti].LK1==k) if (HMDL[ti].LP1==p)
i_num2=ti;
if (HMDL1[i_num2].HT==
cos(M_PI/x)-cos((2*s-1)*M_PI/x))
{
if (HMDL[i_num2].HT!=0) HMDL[i_num2].DT++;
mark2=1;
} }
for (ti=1;ti<=num5;ti++) if (HMDL1[ti].LK2==k) if (HMDL1[ti].LP2==p) if (HMDL1[ti].HT==
cos(M_PI/x)-cos((2*s-1)*M_PI/x)) mark2=1;
if ((mark1==0)&&(mark2==0)) {
Line[2]+=2*n;
num3+=2;
} } }
// printf("num3= %d\n",num3);
// printf("num4= %d\n",num4);
// printf("num5= %d\n",num5);
for (i=2;i<=n/2-1;i++) {
for (ti=1;ti<=num4;ti++) if (HMD[ti].DT==i)
Line[i]+=n;
}
for (i=2;i<=n/2-1;i++) {
for (ti=1;ti<=num5;ti++) if (HMDL[ti].DT==i)
Line[i]+=2*n;
}
for (i=2;i<=n/2;i++)
printf("Line[%d]=%.0f\n",i,Line[i]);
printf("\nBy Euler formula\n");
I_SUM=0;
for (i=2;i<=n/2;i++) I_SUM+=(i-1)*Line[i];
AREA=1+I_SUM+n*(n-1)/(1*2);
printf("The AREA number of %d = %.0f\n",n,(double)AREA);
}
int min_num(int num_a,int num_b) {
int num_c;
num_c=num_a;
if (num_a>num_b) num_c=num_b;
return (num_c);
}