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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование на canvas в DELPHI, Как выделить линию на canvas? 
V
    Опции темы
Faraon
Дата 20.10.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня такая проблема.
Мне необходимо создать простенький графический редактор.
Вся информация о рисунке сохраняется в виде координат в отдельном файле.
Я затрудняюсь написать процедуру, которая бы выделяла выбранную мною линию.

Пользуюсь таким методом: 

при нажатии кнопки мыши

if (x-x1)*(y2-y1)=(y-y1)*(x2-x1) then
  //прорисовываю линию с новым цветом

x,y - координаты мыши при нажатии кнопки
x1,y1,x2,y2 - координаты линии

Работает только для вертикальных или горизонтальных линий.

Подскажите, как выбирать наклонную линию?

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


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

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



Цитата(Faraon @  20.10.2006,  14:12 Найти цитируемый пост)
if (x-x1)*(y2-y1)=(y-y1)*(x2-x1) then

непонятно в чем смысл условия


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Nicholas_S
Дата 20.10.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



drkot, смысл не понятен, потому что либо школа давно прошла, либо прошла очень легко smile 

Faraon, дело в том, что когда ты указываешь точку мышой, то координаты есть целые числа (в пикселях).
Поэтому, подставляя в уравнение прямой, не получется верное равенство, т.к. точка (x, y) не принадлежит линии. Тебе следует сделать "приближенную" проверку. Как? Подумай немножко, потому как решение простое, а самому получить его приятнее.  smile 


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 20.10.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Faraon, ну для начала надо проверить попадает ли точка в прямоугольник, образованый начальной и конечной точкой отрезка, затем проверять, указаное условие, но проверять не ТОЧНО! , а с определенной заданной погрешностью, скажем 3 - 5 единиц человек не снайпер, он не может так точно попасть на линию, да и сама линия чертится НЕ ТОЧНО, а по приближенному алгоритму. Так что то что видно на экране совпадает, с теоретическим, только для гоизонтальных и вертикальных линий, так как только они могут рисоватся точно, все остальное рисуется "с запасом" smile .

Добавлено @ 18:02 
ps. Уравнение в целом составлено верное.

Это сообщение отредактировал(а) alexeis1 - 20.10.2006, 18:01


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

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

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


Опытный
**


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

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



alexeis1, небольшое замечание на коммент: "сама линия чертится НЕ ТОЧНО" не играет роли при получении координат точки, т.к. визуальное отображение не влияет на точность расчета формулы.
"Уравнение в целом составлено верное" - почему в целом? Верное, верное.  smile 


--------------------
...все в мире относительно
PM   Вверх
Alexeis
Дата 20.10.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Nicholas_S @  20.10.2006,  20:02 Найти цитируемый пост)
"Уравнение в целом составлено верное" - почему в целом? Верное, верное.

Потому что должно быть неравенство, а не уравнение.


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

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

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


Новичок



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

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



Код

function PtInLine(X, Y, X0, Y0, X1, Y1, Sens: Integer; var param01: TFloat): Boolean;
var L, P, D: Double;
begin
  Result := False;
  if (X0 = X1)and(Y0 = Y1)then Exit;

  L := Sqrt( Sqr(X1-X0) + Sqr(Y1-Y0) );
  P := ((X-X0)*(X1-X0) + (Y-Y0)*(Y1-Y0))/L;

  if (P > -Sens)and(P < L + Sens) then
  begin
    D := Abs( ( (X-X0)*(Y1-Y0) - (X1-X0)*(Y-Y0) )/L );
    if D < Sens then
    begin
      Result := True;
      param01 := P/L;
    end;
  end;
end;


M
alexeis1
Модератор: для выделения кода следут использовать кнопку "КОД" слева выше поля ввода



Это сообщение отредактировал(а) alexeis1 - 25.10.2006, 17:35
PM MAIL   Вверх
Faraon
Дата 25.10.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



rounin.
Огромное тебе спасибо. Очень помог.
Я правильно понял? Sens - это чувствительность???
PM MAIL   Вверх
Alexeis
Дата 26.10.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Модератор: Тема разделена 
Новая тема находтся по адресу http://forum.vingrad.ru/index.php?showtopic=118446
И называется.
"Рисование линий внутри уже существующих линий"

Faraon, никто не запрещает задавать новые вопросы, просто для этого нужно создавать новые темы smile 


--------------------
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.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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