Ocena użytkownikóww: ***** / 5
Nadesłany przez Tomasz Lubiński, 29 marca 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Okrag - C++/Unit1.cpp:
//Tomasz Lubiński (C)2007
//www.algorytm.org
//Algorytm kreslenia okregow z punktem srodkowym
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void CirclePoints(int x, int y, int x_move, int y_move)
{
Form1->Image->Canvas->Pixels[x+x_move][y+y_move] = clBlack;
Form1->Image->Canvas->Pixels[y+x_move][x+y_move] = clBlack;
Form1->Image->Canvas->Pixels[y+x_move][-x+y_move] = clBlack;
Form1->Image->Canvas->Pixels[x+x_move][-y+y_move] = clBlack;
Form1->Image->Canvas->Pixels[-y+x_move][-x+y_move] = clBlack;
Form1->Image->Canvas->Pixels[-x+x_move][-y+y_move] = clBlack;
Form1->Image->Canvas->Pixels[-y+x_move][x+y_move] = clBlack;
Form1->Image->Canvas->Pixels[-x+x_move][y+y_move] = clBlack;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int x, y;
int x_move, y_move, radius;
int d;
x_move = StrToInt(Edit1->Text);
y_move = StrToInt(Edit2->Text);
radius = StrToInt(Edit3->Text);
x = 0;
y = radius;
d = 5 - 4*radius;
CirclePoints(x, y, x_move, y_move);
while(y > x){
if(d < 0){ /* Select E */
d += x*8 + 12;
x++;
}else{ /* Select SE */
d += (x - y)*8 + 20;
x++;
y--;
}
CirclePoints(x, y, x_move, y_move);
}
}
//---------------------------------------------------------------------------