Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Элипс [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]

Вот эту картинку:


Наверх

Титульная страница Поиск, карта сайта Написать письмо