Геометрия

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
regromus
Сообщения: 12
Зарегистрирован: 10 мар 2005, 14:28
Откуда: Владивосток

8) Привет всем!!!
Помогите пожалуйста, желателен код, вот с ткой задачей:

Дано 3n точек на плоскости. Нужно сделать чтобы никакие 3 из них не лежали на одной прямой.

8) Спасибо....
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

т.е. нужно бросать точки на плоскость и проверять чтобы брошенная точка не попадала в счастливую тройку?
Я правильно понял?

P.S> В принципе при таком раскладе идея есть, но там прийдется много перебирать данных.
Усложнять - легко, упрощать - сложно
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

regromus, код это сильно сказано :) На раздел "Решите мне задачку"
Даю идею. Любые две точки лежат на прямой, которую можно задать следующим образом:
(x-x0)/(x1-x0) = (y-y0)/(y1-y0). Третья точка лежит на этой прямой в случае, если подставив её координаты (x3,y3) в это уравнение вместо x и y ты получишь верное тождество. Такие точки сдвигаешь по x и по y в рандомном направлении на рандомное число в диапазоне от 0 до 1. И повторяешь проверку для всех точек. Может быть точки можно сдвигать по более интеллектуальному принципу, но его изобретать мне лениво.
Даже самый дурацкий замысел можно воплотить мастерски
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

Перебираешь все возможные пары точек на плоскости и при этом делаешь следующие проверки
Вычисляешь расстояние между парой точек(не сложно) и считаешь 2- расстояния от третей до каждой заданой(короче вычисляешь стороны предпологаемого треугольника АВС)
если АВ = АС + СВ ---> точка лежит на прямой, иначе нет
и еще условия типа АС < AB и CB < AB
Долее как уже выразился Aik, рандом рулит :)
Усложнять - легко, упрощать - сложно
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Здесь можно воспользоваться обычным уравнением прямой на плоскости Y = AX + C.

Имея координаты X и Y двух точек прямой, можно найти значения A и C. После этого нужно сравнить другие пары точек массива и если их значения A и C будут совпадать, то эта точка будет являться продолжением одной из имеющихся прямых. Но здесь есть одно исключение: при вычислении значения коэффициента A нужно чтобы координаты X обеих точек не совпадали, иначе будет деление на 0. В таком случае нужно просто проверить в массиве наличие третьей точки с такой же координатой X.
При написании алгоритма для рассчёта уравнения прямых нужно будет учитывать, что прямая из точки Т1 в точку Т2 и прямая из точки Т2 в Т1 - это одна и та же прямая, поэтому кроме массива точек необходимо будет организовать ещё динамический массив прямых для каждой пары точек, чтобы избежать ошибок из-за дублирования прямых.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

WinMain, типа решил выпендрится? :) Если подставить координаты точек в твоё уравнение y = kx+ c, то получится уравнение, которое я привёл выше.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить