⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic_graph.cpp

📁 适用于初学者
💻 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 + -