Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятная задача 
V
    Опции темы
Solominka
Дата 19.1.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.12.2009

Репутация: нет
Всего: нет



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

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

PM MAIL   Вверх
~FoX~
Дата 19.1.2010, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



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;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Solominka
Дата 19.1.2010, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.12.2009

Репутация: нет
Всего: нет



~FoX~, благодарю, а не подскажете какие компоненты и их свойства должны быть на форме чтобы это работало?
Я поставила на форму компонент PaintBox1, скопировала туда этот код, но что-то ничего не рисуется, но и ошибок не выдаёт... Я наверное что-то не то сделала, просто  мне ранее не приходилось работать с данными компонентами... =__=
PM MAIL   Вверх
profesiachuvak
Дата 19.1.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



Установите ещё компонент TButton на форму. 
Сделайте два щелчка по нему и туда вставте код.
Paintbox естественно тоже нужен.

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


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


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Solominka
Дата 19.1.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.12.2009

Репутация: нет
Всего: нет



profesiachuvak, огромное спасибо, теперь всё работает!
PM MAIL   Вверх
~FoX~
Дата 20.1.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



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;



Это сообщение отредактировал(а) ~FoX~ - 20.1.2010, 08:17

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  kordioid.JPG 4,13 Kb


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.