есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1).
не могу понять как это можно сделать, используя целочисленную математику.
Здравствуйте, Аноним, Вы писали:
А>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>не могу понять как это можно сделать, используя целочисленную математику.
Вряд ли это возможно с целочисленной арифметикой, т.к. координаты точек и длины отрезков связаны через теорему Пифагора, а это вычисление корня.
Например, такой метод: обозначим длину отрезка между точками, задающими прямую, как L. Тогда можно просто повернуть отрезок вокруг первой точки (поменять координаты X и Y), а потом скорректировать точки, умножив отрезок на W/L. Единственное, что могу предложить, вычисление последовательным приближением (например, метод Ньютона).
А>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>не могу понять как это можно сделать, используя целочисленную математику.
Здравствуйте, GarryIV, Вы писали:
GIV>Здравствуйте, Аноним, Вы писали:
А>>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>>не могу понять как это можно сделать, используя целочисленную математику.
GIV>Как может быть точка перпендикулярна чему либо?
Точка перпендикулярна всему и параллельна одновременно.
Здравствуйте, Аноним, Вы писали:
А>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>не могу понять как это можно сделать, используя целочисленную математику.
О! школота пришла (это я про слово "Вычеслить").
Делается тривиально, если диапазон позволяет. Например, при использовании 32-битовой арифметики, будет покрыта 16-битовая координатная плоскость. Иначе, извините, никак.
Делай раз:
double W = 10; // требуемое расстояние от x1,y1 до искомой точки
Делай два:
double len = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
double dx = W * (y1 — y2) / len;
double dy = W * (x2 — x1) / len;
Делай три: (искомая точка)
double x = x1 + dx;
double y = y1 + dy;
Соответственно, для целочисленной арифметики все, что нам надо — это уметь вычислить квадратный корень. Есть много способов для этого, гуглить по словам integer square root.
Например, у меня: http://antigrain.com/__code/include/agg_math.h.html#fast_sqrt
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, Аноним, Вы писали:
А>>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>>не могу понять как это можно сделать, используя целочисленную математику.
MS>О! школота пришла (это я про слово "Вычеслить").
у него как раз без ошибки написано. Или я чего-то не понимаю ?
Здравствуйте, IID, Вы писали:
IID>Здравствуйте, McSeem2, Вы писали:
MS>>Здравствуйте, Аноним, Вы писали:
А>>>есть прямая заданная двумя точками (X1 , Y1) (X2 , Y2), нужно вычислить точку расположенную перпендикулярно к данной прямой и на расстоянии W от точки (X1 , Y1). А>>>не могу понять как это можно сделать, используя целочисленную математику.
MS>>О! школота пришла (это я про слово "Вычеслить").
IID> у него как раз без ошибки написано. Или я чего-то не понимаю ?