Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Лежит ли точка на прямой / 6 сообщений из 6, страница 1 из 1
18.08.2004, 09:44
    #32653963
chess
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
Добрый день!
Возникла вот какая проболема!
имеетсся форма на ней расположена панель на которой рисуется линия:

Требуется, в момент когда курсор мыши проходит над данной прямой, это прямая меняла свой цвет.
Формула принадлежности точки к прямой известна

(x3-X1)*(y2-Y1))-((y3-Y1)*(x2-X1))=0

X1 Y1 - координаты мыши
x2 y2 x3 y3 -координаты линии на панели
...
Рейтинг: 0 / 0
18.08.2004, 10:54
    #32654155
Secret
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
в обработчике OnMouseMove придется перебирать все линии и проверять формулу с некоторой точностью (=0 заменить на =точность)
...
Рейтинг: 0 / 0
18.08.2004, 11:42
    #32654302
chess
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
В принципе можно это сделать через класс Region. Может у кого есть примеры работы с этим классом?
...
Рейтинг: 0 / 0
18.08.2004, 17:52
    #32655497
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
Я думаю, что с вашим решением точка может никогда не лежать на прямой, т.к. согласно стандартам операция == на вещественных типах не определена.

А реагировать вам надо на событие, когда вектор растояния от курсора до заданной прямой меняет свое направление на противоположное.
...
Рейтинг: 0 / 0
19.08.2004, 20:12
    #32657796
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
Согласен с Secret, вероятнее лутший вариант это будет учитывать некую погрешность...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
23.08.2004, 18:56
    #32661950
Ray D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Лежит ли точка на прямой
Соответственно формулу надо слегка поменять:
Например так. Простите, что на Паскале, случайно в этот топик забрел
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function IsPointInLine(x1, y1, x2, y2 : integer; P : TPoint) : boolean;
var m: double;
    a: double;
begin
    m := sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    if m = 0 then begin Result := false; exit; end;
    a := ((P.x - x1) * (x2 - x1) + (P.y - y1) * (y2 - y1)) /
    (sqrt((P.x - x1)*(P.x - x1) + (P.y - y1)*(P.y - y1)) *
        m);
    if ((sin(arccos(a)) * m) <= MinDistance) and
        Between(x1 - MinDistance, x2 + MinDistance, P.x) and
        Between(y1 - MinDistance, y2 + MinDistance, P.y)
     then
                Result := true
    else
                Result := false;
end;
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Лежит ли точка на прямой / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]