Здравствуйте, Аноним, Вы писали:
А>есть прямая заданная двумя точками (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