Текущий архив: 2008.01.13;
Скачать: CL | DM;
Вниз
Элипс Найти похожие ветки
← →
bpeguk © (2007-12-17 01:54) [0]ПОЖАЛУЙСТА! Подскажите каким образом я могу нарисовать в делфи вот такую фигуру? Я пытался вытягивать элипс, но у меня ничего не получается. Спасибо.
← →
bpeguk © (2007-12-17 02:08) [1]Вот эту картинку:
← →
Bpeguk © (2007-12-17 02:09) [2]http://www.2and2.net/files/4765af0966201.jpg
← →
Германн © (2007-12-17 02:10) [3]
> ПОЖАЛУЙСТА! Подскажите каким образом я могу нарисовать в
> делфи вот такую фигуру? Я пытался вытягивать элипс, но у
> меня ничего не получается.
Хм. Никогда не пытался "вытягивать элипсы". Я даже не знаю что такое элипс и знать не хочу! Наверно это что-то слишком пошлое!
:)
← →
Bpeguk © (2007-12-17 02:16) [4]О нет, это что то нереальное, немогу нарисовать эту хрень :( а надо безумно
← →
Юрий Зотов © (2007-12-17 03:52) [5]Это так называемый "трилистник". Его уравнение в полярных координатах имеет вид:
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 03:56) [6]Безумно огромное спасибо! Сейчас попробую!!
← →
Юрий Зотов © (2007-12-17 04:09) [7]Так посимпатичнее:
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 04:10) [8]Ммм, еще один вопрос, а почему он вырисовывается такой маленький ?
← →
Юрий Зотов © (2007-12-17 04:15) [9]> Bpeguk © (17.12.07 04:10) [8]
Встречный вопрос - а Вы слово "масштаб" когда-нибудь слышали?
← →
Bpeguk © (2007-12-17 04:18) [10]Извеняюсь за свои слова, осознаю что еще много чего не понимаю в программировании :(
← →
Юрий Зотов © (2007-12-17 04:31) [11]Программирование тут ни при чем. Изменения масштаба, поворот и сдвиг графика - это самая обыкновенная школьная математика. Сравните код в [5] и [7] - все увидите сами.
← →
Bpeguk © (2007-12-17 04:43) [12]Да я уже заметил, еще мне надо было чтобы пользователь мог изменять маштаб, я поставил 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:50) [13]Естественно. Вы же рисуете только при нажатии кнопки. При этом и старое не стираете, и автоматической перермсовки нет.
← →
Юрий Зотов © (2007-12-17 04:57) [14]Короче, вот полный код, разбирайтесь:
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;
← →
Bpeguk © (2007-12-17 05:00) [15]Спасибо. Буду разбираться
Страницы: 1 вся ветка
Текущий архив: 2008.01.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.006 c