Witam, mam do napisania program na grafikę który wyświetli prostą (po podaniu współrzędnej x i y) oraz okrąg (po podaniu współrzędnych x, y oraz promienia r).
Całość jest robiona na Formie, zaznaczam RadioButton (wybór czy ma rysować prostą czy okrąg) i rysuje. To znaczy prostą rysuję bo ją zrobiłem, mam problem z okręgiem, nie mam pomysłu jak go zrobić...
Czy ktoś mógłby mi pomóc?
KOD PROSTEJ:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x1=0,x2=0,y1=0,y2=0;
byte klik = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->Brush->Color=clBlack;
for(int j=0;j<Image1->Height-1;j++)
for(int i=0;i<Image1->Width-1;i++)
{
Image1->Canvas->Pixels[j][i] = RGB(255,255,255);
}
RadioButton1->Checked = true;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for(int j=0;j<Image1->Height-1;j++)
for(int i=0;i<Image1->Width-1;i++)
{
Image1->Canvas->Pixels[j][i] = RGB(255,255,255);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
klik++;
if(klik<=1)
{
Edit1->Text = x1 = X;
Edit2->Text = y1 = Y;
}
if(klik > 1)
{
Edit3->Text = x2 = X;
Edit4->Text = y2 = Y;
{
// zmienne pomocnicze
int d, dx, dy, ai, bi, xi, yi;
int x = x1, y = y1;
// ustalenie kierunku rysowania
if (x1 < x2)
{
xi = 1;
dx = x2 - x1;
}
else
{
xi = -1;
dx = x1 - x2;
}
// ustalenie kierunku rysowania
if (y1 < y2)
{
yi = 1;
dy = y2 - y1;
}
else
{
yi = -1;
dy = y1 - y2;
}
// pierwszy piksel
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
// oś wiodąca OX
if (dx > dy)
{
ai = (dy - dx) * 2;
bi = dy * 2;
d = bi - dx;
// pętla po kolejnych x
while (x != x2)
{
// test współczynnika
if (d > 0)
{
x += xi;
y += yi;
d += ai;
}
else
{
d += bi;
x += xi;
}
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
}
}
// oś wiodąca OY
else
{
ai = ( dx - dy ) * 2;
bi = dx * 2;
d = bi - dy;
// pętla po kolejnych y
while (y != y2)
{
// test współczynnika
if (d > 0)
{
x += xi;
y += yi;
d += ai;
}
else
{
d += bi;
y += yi;
}
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
}
}
}
klik = 0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
x1 = Edit1->Text.ToInt();y1 = Edit2->Text.ToInt();
x2 = Edit3->Text.ToInt();y2 = Edit4->Text.ToInt();
if(RadioButton1->Checked)
{
// zmienne pomocnicze
int d, dx, dy, ai, bi, xi, yi;
int x = x1, y = y1;
// ustalenie kierunku rysowania
if (x1 < x2)
{
xi = 1;
dx = x2 - x1;
}
else
{
xi = -1;
dx = x1 - x2;
}
// ustalenie kierunku rysowania
if (y1 < y2)
{
yi = 1;
dy = y2 - y1;
}
else
{
yi = -1;
dy = y1 - y2;
}
// pierwszy piksel
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
// oś wiodąca OX
if (dx > dy)
{
ai = (dy - dx) * 2;
bi = dy * 2;
d = bi - dx;
// pętla po kolejnych x
while (x != x2)
{
// test współczynnika
if (d > 0)
{
x += xi;
y += yi;
d += ai;
}
else
{
d += bi;
x += xi;
}
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
}
}
// oś wiodąca OY
else
{
ai = ( dx - dy ) * 2;
bi = dx * 2;
d = bi - dy;
// pętla po kolejnych y
while (y != y2)
{
// test współczynnika
if (d > 0)
{
x += xi;
y += yi;
d += ai;
}
else
{
d += bi;
y += yi;
}
Image1->Canvas->Pixels[x][y] = RGB(0,0,0);
}
}
}else
{
}
}
//---------------------------------------------------------------------------