📄 basic_graph.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Basic_graph.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString filename;
long width , height; // BMP图尺寸
int X0=100, Y0=100;
int Ymax=450, Xmax=600;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Left=0;
Top=0;
Form1->Width=1000;
Form1->Height=700;
Label2->Caption = "";
Label4->Caption = "";
Label6->Caption = "";
Image1->Picture->LoadFromFile("windclr.bmp");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Label2->Caption = "";
Label4->Caption = "";
Label6->Caption = "";
Image1->Picture->LoadFromFile("windclr.bmp");
}
//---------------------------------------------------------------------------
//中点法画直线
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Canvas->FillRect(ClientRect);
int x0,y0,x1,y1;
x0=StrToInt(Edit1->Text);
y0=StrToInt(Edit2->Text);
x1=StrToInt(Edit3->Text);
y1=StrToInt(Edit4->Text); //输入端点坐标值
int dx,dy,incre,incrne;
int d,x,y;
float k,t;
if(x0==x1) //竖直的直线
{ if(y0>y1)
{ t=y0; y0=y1; y1=t; }
for(t=y0;t<y1;t++)
Image1->Canvas->Pixels[x0][450-t]=clWhite;
}
else //画斜率大于零的直线
{ if(k>=0)
{ if(x0>x1)
{ t=x0; x0=x1; x1=t;
t=y0; y0=y1; y1=t;
}
dx=x1-x0;
dy=y1-y0;
k=(dy*1.0)/(dx*1.0);
if(k>1)
{ t=x0; x0=y0; y0=t;
t=x1; x1=y1; y1=t;
}
dx=x1-x0;
dy=y1-y0;
d=dy*2-dx;
incre=dy*2;
incrne=(dy-dx)*2;
x=x0;
y=y0;
if(k>1)
Image1->Canvas->Pixels[y][450-x]=clWhite;
else
Image1->Canvas->Pixels[x][450-y]=clWhite;
while(x<x1)
{
if(d<=0)
{
d+=incre;
x++;
}
else
{
d+=incrne;
x++;
y++;
}
if(k>1)
Image1->Canvas->Pixels[y][450-x]=clWhite;
else
Image1->Canvas->Pixels[x][450-y]=clWhite;
}
}
else //画斜率小于零的直线
{
if(x0>x1)
{ t=x0; x0=x1; x1=t;
t=y0; y0=y1; y1=t;
}
dx=x1-x0;
dy=y1-y0;
k=(dy*1.0)/(dx*1.0);
if(k<-1) //斜率小于-1的直线
{ t=y0; y0=x0; x0=t;
t=y1; y1=x1; x1=t;
}
t=y1; y1=y0; y0=t;
dx=x1-x0;
dy=y1-y0;
d=dy*2-dx;
incre=dy*2;
incrne=(dy-dx)*2;
x=x0;
y=y0;
if(k<-1)
Image1->Canvas->Pixels[y][450-(y0+y1-x)]=clWhite;
else
Image1->Canvas->Pixels[x][450-(y0+y1-y)]=clWhite;
while(x<x1)
{
if(d<=0)
{
d+=incre;
x++;
}
else
{
d+=incrne;
x++;
y++;
}
if(k<-1)
Image1->Canvas->Pixels[y][450-(y0+y1-x)]=clWhite;
else
Image1->Canvas->Pixels[x][450-(y0+y1-y)]=clWhite;
}
}
}
}
//---------------------------------------------------------------------------
//中点法画圆
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int xc,yc,x,y,d,deltaE,deltaSE,radius;
xc=StrToFloat(Edit5->Text);
yc=StrToFloat(Edit6->Text);
radius=StrToFloat(Edit7->Text); //输入数值
x=0;
y=radius;
Image1->Canvas->Pen->Color=clRed;
Image1->Canvas->MoveTo(xc-y-10,Ymax-yc);
Image1->Canvas->LineTo(xc+y+10,Ymax-yc);
Image1->Canvas->MoveTo(xc,Ymax-(yc-y-10));
Image1->Canvas->LineTo(xc,Ymax-(yc+y+10)); //画出圆的中心线
d=1-radius;
deltaE=3 ;
deltaSE=5-radius*2;
Image1->Canvas->Pixels[x+xc][450-(y+yc)]=clWhite; //1/8圆弧的第一个点
Image1->Canvas->Pixels[x+xc][450-(y+yc)]=clWhite;
Image1->Canvas->Pixels[y+xc][450-(x+yc)]=clWhite;
Image1->Canvas->Pixels[y-+xc][450-(x+yc)]=clWhite;
Image1->Canvas->MoveTo(x,y);
//利用中点法画出1/8圆弧
while (y>x)
{
if (d<0)
{
d+=deltaE;
deltaE+=2;
deltaSE+=2;
x++;
}
else
{
d+=deltaSE;
deltaE+=2;
deltaSE+=4;
x++;
y--;
}
Image1->Canvas->Pixels[x+xc] [450-(y+yc)]=clWhite;
Image1->Canvas->Pixels[-x+xc][450-(y+yc)]=clWhite;
Image1->Canvas->Pixels[x+xc] [450-(-y+yc)]=clWhite;
Image1->Canvas->Pixels[-x+xc][450-(-y+yc)]=clWhite;
Image1->Canvas->Pixels[y+xc] [450-(x+yc)]=clWhite;
Image1->Canvas->Pixels[-y+xc][450-(x+yc)]=clWhite;
Image1->Canvas->Pixels[y+xc] [450-(-x+yc)]=clWhite;
Image1->Canvas->Pixels[-y+xc][450-(-x+yc)]=clWhite; //将1/8圆弧对称为整圆
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -