Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.02 c
2-1197383299
@!!ex
2007-12-11 17:28
2008.01.13
ДОбавить кнопку в кэпшн чюжих окон.


4-1182193034
Дмитрий Белькевич
2007-06-18 22:57
2008.01.13
Сообщение при подключении к удаленной сессии


3-1189053463
de.
2007-09-06 08:37
2008.01.13
Поиск по Lookup полям


2-1197642802
destrs
2007-12-14 17:33
2008.01.13
dll, что не так делаю...


2-1197630727
9899100
2007-12-14 14:12
2008.01.13
FIBDataSet