📄 unit1.cpp
字号:
Fm2z = (0-Fm2);
else
Fm2z = Fm2;
if (Fm1z >= Fm2z)
{
Fm = Fm2;
Xm = Xm + 1;
//Jx=Jx-1;
if ((Ym + Xm) == 0)
SR = 3;
Ym = Ym + 1;
//Jy=Jy+1;
if ((Ym + Xm) == 0)
SR = 3;
}
else
{
Fm = Fm1;
Ym = Ym + 1;
//Jy=Jy+1;
if ((Ym + Xm) == 0)
SR = 3;
}
break;
case 3:
Fm1 = Fm - 2 *( - Xm) + 1;
Fm2 = Fm1 + 2 *(Ym) + 1;
if (Fm1 < 0)
//取绝对值
Fm1z = (0-Fm1);
else
Fm1z = Fm1;
if (Fm2 < 0)
Fm2z = (0-Fm2);
else
Fm2z = Fm2;
if (Fm1z >= Fm2z)
{
Fm = Fm2;
Xm = Xm + 1;
//Jx=Jx-1;
if (Xm == 0)
SR = 2;
Ym = Ym + 1;
//Jy=Jy+1;
//if(Xm==0)
// SR=7;
}
else
{
Fm = Fm1;
Xm = Xm + 1;
//Jx=Jx-1;
if (Xm == 0)
SR = 2;
}
break;
case 2:
Fm1 = Fm + 2 * Xm + 1;
Fm2 = Fm1 - 2 * Ym + 1;
if (Fm1 < 0)
//取绝对值
Fm1z = (0-Fm1);
else
Fm1z = Fm1;
if (Fm2 < 0)
Fm2z = (0-Fm2);
else
Fm2z = Fm2;
if (Fm1z >= Fm2z)
{
Fm = Fm2;
Xm = Xm + 1;
//Jx=Jx-1;
if ((Xm - Ym) == 0)
SR = 1;
Ym = Ym - 1;
//Jy=Jy-1;
if ((Xm - Ym) == 0)
SR = 1;
}
else
{
Fm = Fm1;
Xm = Xm + 1;
//Jx=Jx-1;
if ((Xm - Ym) == 0)
SR = 1;
}
break;
case 1:
Fm1 = Fm - 2 * Ym + 1;
Fm2 = Fm1 + 2 * Xm + 1;
if (Fm1 < 0)
//取绝对值
Fm1z = (0-Fm1);
else
Fm1z = Fm1;
if (Fm2 < 0)
Fm2z = (0-Fm2);
else
Fm2z = Fm2;
if (Fm1z >= Fm2z)
{
Fm = Fm2;
Xm = Xm + 1;
//Jx=Jx-1;
if (Ym == 0)
SR = 8;
Ym = Ym - 1;
//Jy=Jy-1;
//if(Ym==0)
// SR=8;
}
else
{
Fm = Fm1;
Ym = Ym - 1;
//Jy=Jy-1;
if (Ym == 0)
SR = 8;
}
break;
}
if (num < 10)
//前10次不计算
num++;
else
{
if (((Xm - X1) >= 0))
//取绝对值
Xj = Xm - X1;
if (((X1 - Xm) >= 0))
Xj = X1 - Xm;
if (((Ym - Y1) >= 0))
//取绝对值
Yj = Ym - Y1;
if (((Y1 - Ym) >= 0))
Yj = Y1 - Ym;
if ((Yj <= 5) && (Xj <= 5))
{
if ((Yj == 0) && (Xj == 0))
finish = 1;
else
{
nold = n;
n = Xj + Yj;
if (nold < n)
finish = 2;
}
}
}
if (finish < 2)
{
Delay(544000);
Form1->Canvas->Pixels[Xm + 200+x][Ym + 200+y] = clRed;
}
} //while((Jx!=0)||(Jy!=0)) ;
while (finish == 0);
}
CPoint returncore(CPoint first, CPoint second, CPoint third) //返回园心
{
//int x1,x2,y1,y2,x3,y3;
//double x = 0;
// double y = 0;
CPoint p;
int x1, y1, x3, y3;
double a, b, c, d, e, f;
double r, k1, k2, x, y, x2, y2;
x1 = first.x;
y1 = first.y;
x2 = second.x;
y2 = second.y;
x3 = third.x;
y3 = third.y;
//cout<<"请输入x1,y1,x2,y2,x3,y3"<<endl;
//cin>>x1>>y1>>x2>>y2>>x3>>y3;
if ((y1 == y2) && (y2 == y3))
{
Application->MessageBox("三点不构成圆!", "Look", MB_OK);
Application->MessageBox("三点不构成圆!", "Look", MB_OK);
return first;
}
if ((y1 != y2) && (y2 != y3))
{
k1 = (x2 - x1) / (y2 - y1);
k2 = (x3 - x2) / (y3 - y2);
}
if (k1 == k2)
{
Application->MessageBox("三点不构成圆!", "Look", MB_OK);
return first;
}
a = 2 *(x2 - x1);
b = 2 *(y2 - y1);
c = x2 * x2 + y2 * y2 - x1 * x1 - y1 * y1;
d = 2 *(x3 - x2);
e = 2 *(y3 - y2);
f = x3 * x3 + y3 * y3 - x2 * x2 - y2 * y2;
x = (b *f - e * c) / (b *d - e * a);
y = (d *c - a * f) / (b *d - e * a);
// cout<<"圆心为("<<x<<","<<y<<")"<<endl;
// r = sqrt((x - x1)*(x - x1) + (y - y1)*(y - y1));
// cout<<"半径为"<<r<<endl;
p.x = x;
p.y = y;
return p;
/*
x1=first.x;
y1=first.y;
x2=second.x;
y2=second.y;
x3=third.x;
y3=third.y;
CPoint core;
core.x=((-x2*x2*y1)+y1*y1*y2+x1*x1*y2-y1*y2*y2)/(2*x1*y2-2*x2*y1)+first.x;
core.x =((y3- y1)* (y2* y2-y1*y1+x2*x2-x1*x1)+(y2-y1)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(x2-x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
core.y =((y3- y1)* (y2* y2-y1*y1+x2*x2-x1*x1)+(y2-y1)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(x2-x1)*(y3-y1)-2*(x3-x1)*(y2-y1));
x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2*(x3-x1)*(y2-y1)-2*((x2-x1)*(y3-y1)));
y=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2*(y3-y1)*(x2-x1)-2*((y2-y1)*(x3-x1)));
core.y=(x1*x2*x2+x1*y2*y2-x1*x1*x2-x2*y1*y1)/(2*x1*y2-2*x2*y1)+first.y;
return core;
*/
/*
int x1,x2,y1,y2;
x1=second.x-first.x;
y1=second.y-first.y;
x2=third.x-first.x;
y2=third.y-first.y;
CPoint core;
core.x=((-x2*x2*y1)+y1*y1*y2+x1*x1*y2-y1*y2*y2)/(2*x1*y2-2*x2*y1)+first.x;
core.y=(x1*x2*x2+x1*y2*y2-x1*x1*x2-x2*y1*y1)/(2*x1*y2-2*x2*y1)+first.y;
return core;
*/
}
unsigned int returnr(CPoint core, CPoint first) //返回半径
{
float r;
unsigned int i;
r = sqrt(pow(first.x - first.x, 2) + pow(first.y - first.y, 2));
i = (unsigned int)r;
if ((r - i) >= 0.5)
return r++;
else
return r;
}
void __fastcall TForm1::Button6Click(TObject *Sender)
{
draw_circleSR(StrToInt(Edit1->Text), StrToInt(Edit2->Text), StrToInt(Edit3
->Text), StrToInt(Edit4->Text), 0, 0); /*关键的圆插补函数*/
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mouseup(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
switch (num)
{
case 0:
Edit5->Text = X;
Edit6->Text = Y;
Form1->Canvas->Pixels[StrToInt(Edit5->Text) ][StrToInt(Edit6->Text)] = clRed;
num++;
break;
case 1:
Edit7->Text = X;
Edit8->Text = Y;
Form1->Canvas->Pixels[StrToInt(Edit7->Text) ][StrToInt(Edit8->Text)] = clRed;
num++;
break;
case 2:
Edit9->Text = X;
Edit10->Text = Y;
Form1->Canvas->Pixels[StrToInt(Edit9->Text) ][StrToInt(Edit10->Text)] = clRed;
num++;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
draw_circleNR(StrToInt(Edit1->Text), StrToInt(Edit2->Text), StrToInt(Edit3
->Text), StrToInt(Edit4->Text),0,0); /*关键的圆插补函数*/
}
//---------------------------------------------------------------------------
unsigned char SRNR(int X0, int Y0, int X1, int Y1,int X2, int Y2 )
{
//int X=X0,Y=Y0;
char R0 = 0; //开始时使用那个象限
char R1 = 0;
char R2 = 0; //结束时使用那个象限
char SN=0; //默认是个
int X0Z,X1Z,X2Z;
if (X0 < 0)
X0Z = (0-X0);
else
X0Z = X0;
if (X1 < 0)
X1Z = (0-X1);
else
X1Z = X1;
if (X2 < 0)
X2Z = (0-X2);
else
X2Z = X2;
if ((X0 >= 0) && (Y0 >= 0) ) //计算起使象限
R0 = 1;
else if ((X0 < 0) && (Y0 >= 0))
R0 = 2;
else if ((X0 < 0) && (Y0 < 0))
R0 = 3;
else if ((X0 >= 0) && (Y0 < 0))
R0 = 4;
if ((X1 >= 0) && (Y1 >= 0) ) //计算起使象限
R1 = 1;
else if ((X1 < 0) && (Y1 >= 0))
R1 = 2;
else if ((X1 < 0) && (Y1 < 0))
R1 = 3;
else if ((X1 >= 0) && (Y1 < 0))
R1 = 4;
if ((X2 >= 0) && (Y2 >= 0) ) //计算起使象限
R2 = 1;
else if ((X2 < 0) && (Y2 >= 0))
R2 = 2;
else if ((X2 < 0) && (Y2 < 0))
R2 = 3;
else if ((X2 >= 0) && (Y2 < 0))
R2 = 4;
if((R2==R1)&&(R1==R0))
{
if((R0==1)||(R0==3))
{
if(X2Z>=X0Z)
{
if(X1Z>=X2Z)
SN=1;
else
SN=2;
}
else
{
if(X1Z>=X2Z)
SN=1;
else
SN=2;
}
//SN=1;
}
else
{
if(X2Z>=X0Z)
{
if(X1Z>=X2Z)
SN=2;
else
SN=1;
}
else
{
if(X1Z>=X2Z)
SN=2;
else
SN=1;
}
}
}
else if((R0==R1))
{
if((R0==1)||(R0==3))
{
if(X1Z>=X0Z)
SN=2;
else
SN=1;
}
else
{
if(X1Z>=X0Z)
SN=1;
else
SN=2;
}
}
else if((R1==R2))
{
if((R1==1)||(R1==3))
{
if(X2Z>=X1Z)
SN=2;
else
SN=1;
}
else
{
if(X2Z>=X1Z)
SN=1;
else
SN=2;
}
}
else if((R0==R2))
{
if((R0==1)||(R0==3))
{
if(X2Z>=X0Z)
SN=1;
else
SN=2;
}
else
{
if(X2Z>=X0Z)
SN=2;
else
SN=1;
}
}
//else if((R2>R1)&&(R1>R0))
//SN=1;
//else if((R0<R1)&&(R1<R2))
// SN=2;
else if((R0==1))
{
if((R1<R2))
SN=1;
else
SN=2;
}
else if((R0==2))
{
if((R2==1))
SN=1;
else if((R1==3)&&(R2==4))
SN=1;
else
SN=2;
}
else if((R0==3))
{
if((R1==4))
SN=1;
else if((R1==1)&&(R2==2))
SN=1;
else
SN=2;
}
else if((R0==4))
{
if((R2>R1))
SN=1;
else
SN=2;
}
return SN;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CPoint a, b, c, d;
unsigned int n;
unsigned char s;
if (num == 3)
{
a.x = StrToInt(Edit5->Text) - 200;
a.y = StrToInt(Edit6->Text) - 200;
//Form1->Canvas->Pixels[a.x ][a.y] = clRed;
b.x = StrToInt(Edit7->Text) - 200;
b.y = StrToInt(Edit8->Text) - 200;
//Form1->Canvas->Pixels[b.x ][b.y] = clRed;
c.x = StrToInt(Edit9->Text - 200);
c.y = StrToInt(Edit10->Text) - 200;
//Form1->Canvas->Pixels[c.x ][c.y] = clRed;
d = returncore(a, b, c);
Edit11->Text = d.x;
Edit12->Text = d.y;
switch (SRNR(a.x-d.x, a.y-d.y,b.x-d.x, b.y-d.y,c.x-d.x, c.y-d.y ))
{
case 1:
draw_circleNR(a.x-d.x, a.y-d.y, c.x-d.x, c.y-d.y,d.x,d.y);
break;
case 2:
draw_circleSR(a.x-d.x, a.y-d.y, c.x-d.x, c.y-d.y,d.x,d.y);
break;
}
//n = returnr(d, a);
//Edit13->Text = n;
}
num = 0;
//draw_circleNR(a.x,a.y,c.x,c.x,d.x,d.y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
CPoint a, b, c, d;
unsigned int n;
unsigned char s;
Form1->Canvas->Pixels[StrToInt(Edit5->Text) ][StrToInt(Edit6->Text)] = clRed;
Form1->Canvas->Pixels[StrToInt(Edit7->Text) ][StrToInt(Edit8->Text)] = clRed;
Form1->Canvas->Pixels[StrToInt(Edit9->Text) ][StrToInt(Edit10->Text)] = clRed;
//if (num == 3)
{
a.x = StrToInt(Edit5->Text) - 200;
a.y = StrToInt(Edit6->Text) - 200;
//Form1->Canvas->Pixels[a.x ][a.y] = clRed;
b.x = StrToInt(Edit7->Text) - 200;
b.y = StrToInt(Edit8->Text) - 200;
//Form1->Canvas->Pixels[b.x ][b.y] = clRed;
c.x = StrToInt(Edit9->Text - 200);
c.y = StrToInt(Edit10->Text) - 200;
//Form1->Canvas->Pixels[c.x ][c.y] = clRed;
d = returncore(a, b, c);
Edit11->Text = d.x;
Edit12->Text = d.y;
switch (SRNR(a.x-d.x, a.y-d.y,b.x-d.x, b.y-d.y,c.x-d.x, c.y-d.y ))
{
case 1:
draw_circleNR(a.x-d.x, a.y-d.y, c.x-d.x, c.y-d.y,d.x,d.y);
break;
case 2:
draw_circleSR(a.x-d.x, a.y-d.y, c.x-d.x, c.y-d.y,d.x,d.y);
break;
}
//n = returnr(d, a);
//Edit13->Text = n;
}
// num = 0;
//draw_circleNR(a.x,a.y,c.x,c.x,d.x,d.y);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -