Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Непонятная задача


Автор: Solominka 19.1.2010, 20:02
Нужно решить следующую задачу на Delphi с формой и компонентами:
 
Построить   кривую (кардиоида) по   заданному  параметрическому представлению: 
   x=a*cos(t)(1+cos(t)),  y=a*sin (t)(1+cos(t)), a>0, t принадлежит промежутку [0,2pi).

Помогите пожалуйста понять хотя бы суть! Я даже не знаю, с чего начать :(

Автор: ~FoX~ 19.1.2010, 22:14
Solominka, А что не понятно то? Что такое параметрическое представление?
Вот линейные координаты     (x^2 + y^2)^2 - 2ax (x^2 + y^2) - a^2 y^2 = 0 
Вот параметрическое     x = acost(1 + cost),   y = asint(1 + cost) 
Вот в полярных координатах     r = a (1 - cos(Ф)) 

Вот простой код который рисует эту ерунду
Код

var
  x, y, a : real;
  t: integer;
begin
  a:= 15;
  x:=Trunc((a*cos(0)*(1+cos(0)))*3)+100;
  y:=Trunc((a*sin(0)*(1+cos(0)))*3)+100;
  PaintBox1.Canvas.MoveTo(Trunc(x), Trunc(y));

  for t := 1 to 6 do begin
    x:=((a*cos(t)*(1+cos(t)))*3)+100;
    y:=Trunc((a*sin(t)*(1+cos(t)))*3)+100;
    PaintBox1.Canvas.Pen.Color := clRed;
    PaintBox1.Canvas.LineTo(Trunc(x), Trunc(y));
  end;
end;

Автор: Solominka 19.1.2010, 22:31
~FoX~, благодарю, а не подскажете какие компоненты и их свойства должны быть на форме чтобы это работало?
Я поставила на форму компонент PaintBox1, скопировала туда этот код, но что-то ничего не рисуется, но и ошибок не выдаёт... Я наверное что-то не то сделала, просто  мне ранее не приходилось работать с данными компонентами... =__=

Автор: profesiachuvak 19.1.2010, 22:47
Установите ещё компонент TButton на форму. 
Сделайте два щелчка по нему и туда вставте код.
Paintbox естественно тоже нужен.

Добавлено через 1 минуту и 16 секунд
Цитата(Solominka @  19.1.2010,  22:31 Найти цитируемый пост)
скопировала туда этот код,


 smile  А то непонятно куда Вы вообще код скопировали  smile 
Его на определённое событие нужно вставлять. 

Автор: Solominka 19.1.2010, 23:01
profesiachuvak, огромное спасибо, теперь всё работает!

Автор: ~FoX~ 20.1.2010, 08:15
F вот так вот будет симпатишней, да и правильней по твоей задачи...
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  x, y, a, j, t : real;
  i: integer;
begin
  a:= 15;
  x:=Trunc((a*cos(0)*(1+cos(0)))*3)+100;
  y:=Trunc((a*sin(0)*(1+cos(0)))*3)+100;
  PaintBox1.Canvas.MoveTo(Trunc(x), Trunc(y));
  j := 0.01;
  for i := 1 to 200 do begin
    j := j + 0.01;
    t := pi*j;
    x:=((a*cos(t)*(1+cos(t)))*3)+100;
    y:=Trunc((a*sin(t)*(1+cos(t)))*3)+100;
    PaintBox1.Canvas.Pen.Color := clRed;
    PaintBox1.Canvas.LineTo(Trunc(x), Trunc(y));
  end;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)