![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Элипс [D7, XP]
bpeguk © (2007-12-17 01:54:00)ПОЖАЛУЙСТА! Подскажите каким образом я могу нарисовать в делфи вот такую фигуру? Я пытался вытягивать элипс, но у меня ничего не получается. Спасибо.
Bpeguk (2007-12-17 05:00:00) [1]Спасибо. Буду разбираться
Юрий Зотов (2007-12-17 04:57:00) [2]Короче, вот полный код, разбирайтесь:
uses
Math;
procedure TForm1.FormShow(Sender: TObject); // OnShow
begin
DoubleBuffered := True
end;
procedure TForm1.FormPaint(Sender: TObject); // OnPaint
var
i, x, y: integer;
r, fi: extended;
begin
for i := 0 to 3599 do
begin
fi := DegToRad(i / 10);
r := 80*(1 + cos(3*fi)) - 80*sqr(sin(3*fi));
x := Round(r*cos(fi - pi/2)) + ClientWidth div 2;
y := Round(r*sin(fi - pi/2)) + ClientHeight div 2;
Canvas.Pixels[x, y] := clBlack
end
end;
procedure TForm1.FormResize(Sender: TObject); // OnResize
begin
Invalidate
end;
Юрий Зотов (2007-12-17 04:50:00) [3]Естественно. Вы же рисуете только при нажатии кнопки. При этом и старое не стираете, и автоматической перермсовки нет.
Bpeguk (2007-12-17 04:43:00) [4]Да я уже заметил, еще мне надо было чтобы пользователь мог изменять маштаб, я поставил TEdit на форму и обьявил переменную Scale , всё работает, спасибо. Но проблема еще в том, что при передвижении формы, она теряет рисунок, и в том что когда я меняю маштаб, она рисует поверх уже нарисованому :(
implementation
{$R *.dfm}
var
Scale: integer;
procedure TForm1.Button1Click(Sender: TObject);
var
i, x, y: integer;
r, fi: extended;
begin
Scale:= StrToInt(Edit1.Text);
for i := 0 to 359 do
begin
fi := DegToRad(i);
r := Scale*(1 + cos(3*fi)) - Scale* sqr(sin(3*fi));
x := Round(r * cos(fi - pi/2)) + ClientWidth div 2;
y := Round(r * sin(fi - pi/2)) + ClientHeight div 2;
Canvas.Pixels[x, y] := clBlack
end
end;
end.
Юрий Зотов (2007-12-17 04:31:00) [5]Программирование тут ни при чем. Изменения масштаба, поворот и сдвиг графика - это самая обыкновенная школьная математика. Сравните код в [5] и [7] - все увидите сами.
Bpeguk (2007-12-17 04:18:00) [6]Извеняюсь за свои слова, осознаю что еще много чего не понимаю в программировании :(
Юрий Зотов (2007-12-17 04:15:00) [7]> Bpeguk © (17.12.07 04:10) [8]
Встречный вопрос - а Вы слово "масштаб" когда-нибудь слышали?
Bpeguk (2007-12-17 04:10:00) [8]Ммм, еще один вопрос, а почему он вырисовывается такой маленький ?
Юрий Зотов (2007-12-17 04:09:00) [9]Так посимпатичнее:
for i := 0 to 359 do
begin
fi := DegToRad(i);
r := 40*(1 + cos(3*fi)) - 40 * sqr(sin(3*fi));
x := Round(r * cos(fi - pi/2)) + ClientWidth div 2;
y := Round(r * sin(fi - pi/2)) + ClientHeight div 2;
Canvas.Pixels[x, y] := clBlack
end
Bpeguk (2007-12-17 03:56:00) [10]Безумно огромное спасибо! Сейчас попробую!!
Юрий Зотов (2007-12-17 03:52:00) [11]Это так называемый "трилистник". Его уравнение в полярных координатах имеет вид:
r := 4*(1 + cos(3*fi)) - 4*sqr(sin(3*fi))
Рисуется примерно так:
uses
Math;
procedure TForm1.FormPaint(Sender: TObject);
var
i, x, y: integer;
r, fi: extended;
begin
for i := 0 to 359 do
begin
fi := DegToRad(i);
r := 4*(1 + cos(3*fi)) - 4*sqr(sin(3*fi));
x := Round(r*cos(fi)) + ClientWidth div 2;
y := Round(r*sin(fi)) + ClientHeight div 2;
Canvas.Pixels[x, y] := clBlack
end
end;
Bpeguk (2007-12-17 02:16:00) [12]О нет, это что то нереальное, немогу нарисовать эту хрень :( а надо безумно
Германн (2007-12-17 02:10:00) [13]
> ПОЖАЛУЙСТА! Подскажите каким образом я могу нарисовать в
> делфи вот такую фигуру? Я пытался вытягивать элипс, но у
> меня ничего не получается.
Хм. Никогда не пытался "вытягивать элипсы". Я даже не знаю что такое элипс и знать не хочу! Наверно это что-то слишком пошлое!
:)
Bpeguk (2007-12-17 02:09:00) [14]http://www.2and2.net/files/4765af0966201.jpg
bpeguk (2007-12-17 02:08:00) [15]Вот эту картинку: