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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как нарисовать прямоугольник под углом? Рисование под углом 
:(
    Опции темы
Faraon
Дата 31.10.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Мне нужна помощь. Нужно написать процедуру для рисования прямоугольника под некоторым углом.

procedure ortogonal (x1,y1,x2,y2:integer);
где x1,y1 - координаты нажатия кнопки мыши.
       х2,х2 - текущие координаты указателя мыши при нажатой кнопке.

Прямоугольник должен рисоваться через polygon.
Помогите пожалуйста. 

PM MAIL   Вверх
Digar
Дата 31.10.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не понятно: x1,y1-x2,y2 определяют только одну сторону прямоугольника???
PM MAIL   Вверх
Alexeis
Дата 31.10.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Digar @  31.10.2006,  13:02 Найти цитируемый пост)
Не понятно: x1,y1-x2,y2 определяют только одну сторону прямоугольника??? 

Не хватает данных. По этим данным можно построить бесконечное число прямоугольников (под разными углами) Вспомним хотя бы треугольник вписанный в окружность опирающийся на диаметр. У него всегда угол бдет 90 градусов, а если к его гипотенузе приложить такой же  треугольник повернутый на 180 градусов, то все 4 угла будут по 90 градусов, а таких треугольников можно сделать любое количество


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Faraon
Дата 31.10.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет нет. x1y1 - это середина одной стороны прямоугольника, x2y2 - другой, ей противоположной.
Это именно середины противоположных сторон (входные параметры). Я затрудняюсь найти координаты всех углов прямоугольника, который расположен под углом
PM MAIL   Вверх
Snowy
Дата 31.10.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Цитата(Faraon @  31.10.2006,  21:15 Найти цитируемый пост)
Нет нет. x1y1 - это середина одной стороны прямоугольника, x2y2 - другой, ей противоположной.
Противоположной или перпендикулярной?
Противоположная сторона также ничего не даёт smile
PM MAIL   Вверх
Alexeis
Дата 31.10.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Snowy @  31.10.2006,  20:29 Найти цитируемый пост)
Противоположной или перпендикулярной?

Ни тот ни другой вариант не дает однозначности. Я вот только что нарисовал две точки и по ним построил 8 различных прямоугольников соответствующих этому условию (можно сколько угодно). 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Faraon
Дата 1.11.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята, в принципе у меня не работает только одна формула. Подскажите правильную.
Вот моя процедура:

Код

procedure draw_wind(x1,y1,x2,y2,size:integer);
// x1,y1,x2,y2 - координаты начала и конца линии (в нашем случае прямоугольника)
//size - толщина линии
 
var tol :byte;  //половина толщины линии
      sh : integer;  //смещение
begin
  with form_main.im.Canvas do
  begin
    pen.Width:=size;
    pen.Color:=clBlack;
    pen.Width:=1;
    tol:=ceil(size/2); 

   //эта формула не работает. Подскажите как надо написать.
    sh:=ceil(tol*sin(arctan((y1-y2)/(x1-x2))));

    if y1 = y2 then  //рисуем горизонтальную линию
      polygon([  point(x1,y1-tol),point(x2,y2-tol),
                 point(x2,y2+tol),point(x1,y1+tol) ]);
    if x1 = x2 then  //рисуем вертикальную линию
      polygon([  point(x1-tol,y1),point(x2-tol,y2),
                 point(x2+tol,y2),point(x1+tol,y1) ]);
    
    //рисуем линию под углом
    if (x1<x2) and (y1<y2) then
      polygon([  point(x1+sh,y1-sh),point(x2+sh,y2-sh),
                       point(x2-sh,y2+sh),point(x1-sh,y1+sh) ]);

    if (x1<x2) and (y1>y2) then
      polygon([  point(x1-sh,y1-sh),point(x2-sh,y2-sh),
                       point(x2+sh,y2+sh),point(x1+sh,y1+sh) ]);

    if (x1>x2) and (y1>y2) then
      polygon([  point(x1-sh,y1+sh),point(x2-sh,y2+sh),
                       point(x2+sh,y2-sh),point(x1+sh,y1-sh) ]);

    if (x1>x2) and (y1<y2) then
      polygon([  point(x1+sh,y1+sh),point(x2+sh,y2+sh),
                       point(x2-sh,y2-sh),point(x1-sh,y1-sh) ]);
  end;
end;



Это сообщение отредактировал(а) alexeis1 - 1.11.2006, 15:53
PM MAIL   Вверх
Alexeis
Дата 1.11.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Модератор: Для выделения кода есть кнопка "КОД". Попробуйте ее в действии  smile 
Цитата(Faraon @  1.11.2006,  15:14 Найти цитируемый пост)
Подскажите правильную.

Подскажем, но только когда будет четкая формулировка, пока что задача не имеет решения.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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