Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
2-1197378358
9899100
2007-12-11 16:05
2008.01.13
замена конструктора


15-1197218888
Grain
2007-12-09 19:48
2008.01.13
Выборы грядут!


4-1181578038
Тохер
2007-06-11 20:07
2008.01.13
Как получить картинку с USB фотокамеры.


15-1197012661
Бакук
2007-12-07 10:31
2008.01.13
Перенос почты Opera 9 —> Outlook 2003


15-1197024666
class_
2007-12-07 13:51
2008.01.13
Узнать класс




   Наверх