Главная страница
    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.007 c
6-1177784081
Dmitry_177
2007-04-28 22:14
2008.01.13
не доходит значение типа integer


15-1197295580
slavakaram
2007-12-10 17:06
2008.01.13
Массовая рассылка почты с помощью idSMTP


15-1197157034
ProgRAMmer Dimonych
2007-12-09 02:37
2008.01.13
Посоветуйте, плз, программу


15-1197103154
Igor Zorkov
2007-12-08 11:39
2008.01.13
Хостинге


4-1181550273
Jetus
2007-06-11 12:24
2008.01.13
Сообщение Windows о смене суток





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский