8) Привет всем!!!
Помогите пожалуйста, желателен код, вот с ткой задачей:
Дано 3n точек на плоскости. Нужно сделать чтобы никакие 3 из них не лежали на одной прямой.
8) Спасибо....
Геометрия
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
т.е. нужно бросать точки на плоскость и проверять чтобы брошенная точка не попадала в счастливую тройку?
Я правильно понял?
P.S> В принципе при таком раскладе идея есть, но там прийдется много перебирать данных.
Я правильно понял?
P.S> В принципе при таком раскладе идея есть, но там прийдется много перебирать данных.
Усложнять - легко, упрощать - сложно
regromus, код это сильно сказано
На раздел "Решите мне задачку"
Даю идею. Любые две точки лежат на прямой, которую можно задать следующим образом:
(x-x0)/(x1-x0) = (y-y0)/(y1-y0). Третья точка лежит на этой прямой в случае, если подставив её координаты (x3,y3) в это уравнение вместо x и y ты получишь верное тождество. Такие точки сдвигаешь по x и по y в рандомном направлении на рандомное число в диапазоне от 0 до 1. И повторяешь проверку для всех точек. Может быть точки можно сдвигать по более интеллектуальному принципу, но его изобретать мне лениво.

Даю идею. Любые две точки лежат на прямой, которую можно задать следующим образом:
(x-x0)/(x1-x0) = (y-y0)/(y1-y0). Третья точка лежит на этой прямой в случае, если подставив её координаты (x3,y3) в это уравнение вместо x и y ты получишь верное тождество. Такие точки сдвигаешь по x и по y в рандомном направлении на рандомное число в диапазоне от 0 до 1. И повторяешь проверку для всех точек. Может быть точки можно сдвигать по более интеллектуальному принципу, но его изобретать мне лениво.
Даже самый дурацкий замысел можно воплотить мастерски
Перебираешь все возможные пары точек на плоскости и при этом делаешь следующие проверки
Вычисляешь расстояние между парой точек(не сложно) и считаешь 2- расстояния от третей до каждой заданой(короче вычисляешь стороны предпологаемого треугольника АВС)
если АВ = АС + СВ ---> точка лежит на прямой, иначе нет
и еще условия типа АС < AB и CB < AB
Долее как уже выразился Aik, рандом рулит
Вычисляешь расстояние между парой точек(не сложно) и считаешь 2- расстояния от третей до каждой заданой(короче вычисляешь стороны предпологаемого треугольника АВС)
если АВ = АС + СВ ---> точка лежит на прямой, иначе нет
и еще условия типа АС < AB и CB < AB
Долее как уже выразился Aik, рандом рулит

Усложнять - легко, упрощать - сложно
Здесь можно воспользоваться обычным уравнением прямой на плоскости Y = AX + C.
Имея координаты X и Y двух точек прямой, можно найти значения A и C. После этого нужно сравнить другие пары точек массива и если их значения A и C будут совпадать, то эта точка будет являться продолжением одной из имеющихся прямых. Но здесь есть одно исключение: при вычислении значения коэффициента A нужно чтобы координаты X обеих точек не совпадали, иначе будет деление на 0. В таком случае нужно просто проверить в массиве наличие третьей точки с такой же координатой X.
При написании алгоритма для рассчёта уравнения прямых нужно будет учитывать, что прямая из точки Т1 в точку Т2 и прямая из точки Т2 в Т1 - это одна и та же прямая, поэтому кроме массива точек необходимо будет организовать ещё динамический массив прямых для каждой пары точек, чтобы избежать ошибок из-за дублирования прямых.
Имея координаты X и Y двух точек прямой, можно найти значения A и C. После этого нужно сравнить другие пары точек массива и если их значения A и C будут совпадать, то эта точка будет являться продолжением одной из имеющихся прямых. Но здесь есть одно исключение: при вычислении значения коэффициента A нужно чтобы координаты X обеих точек не совпадали, иначе будет деление на 0. В таком случае нужно просто проверить в массиве наличие третьей точки с такой же координатой X.
При написании алгоритма для рассчёта уравнения прямых нужно будет учитывать, что прямая из точки Т1 в точку Т2 и прямая из точки Т2 в Т1 - это одна и та же прямая, поэтому кроме массива точек необходимо будет организовать ещё динамический массив прямых для каждой пары точек, чтобы избежать ошибок из-за дублирования прямых.
WinMain, типа решил выпендрится?
Если подставить координаты точек в твоё уравнение y = kx+ c, то получится уравнение, которое я привёл выше.

Даже самый дурацкий замысел можно воплотить мастерски