Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Элипс   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
15-1197210350
Ольга
2007-12-09 17:25
2008.01.13
Где найти наборы иконок


15-1196797479
Sergey Masloff
2007-12-04 22:44
2008.01.13
Прощай Win2000...


15-1196924925
TUser
2007-12-06 10:08
2008.01.13
Спам непобедим?


2-1197380457
Neo
2007-12-11 16:40
2008.01.13
проблема с paradox


15-1197061780
Максим
2007-12-08 00:09
2008.01.13
Пример





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский