Есть координатная сетка с одинаковыми интервалами Возьмём к примеру 512, сетка всегда положительна(-512 быть не может) Как наиболее быстро определить точку пересечения c сеткой Иллюстрация задан 14 Окт '13 17:45 oztro |
Я понял Вашу задачу так (для рассматриваемого частного случая). Есть отрезок, концы которого равны в координатной записи $%(105,104)$% и $%(110,94)$%. Требуется найти его пересечение с линией сетки $%y=100$%. Точка пересечения имеет координаты $%(a,100)$%. Число $%a$% определяется из пропорции: $$\frac{110-a}{a-105}=\frac{94-100}{100-104}=\frac32.$$ Это приводит к линейному уравнению, решая которое, получаем $%a=107$%. В общем случае поступаем аналогично. Значение $%a$%, найденное из уравнения, может быть и не целым. В этом случае его можно округлить до ближайшего целого. отвечен 15 Окт '13 19:12 falcao |
Точку пересечения чего именно надо определить? На рисунке изображены отрезки, но надо описать, в каком виде они даны.
Отрезки заданы начальными и конечными координатами A x1y1 - x2y2 Причём всегда целыми числами Найти точку пересечения с сеткой
А каким способом тогда задана сетка? И что делать, если отрезок длинный, и он линии сетки пересекает несколько раз?
Обычно отрезки максимум в 1/4 размера сетки, но действительно могу пересекать сетку в углах 2 раза. Спасибо отказался от этой идеи, но успел написать решение на javascripte для частного случая. http://filebeam.com/79d632c44fb10045e66f5b7405be2986.jpg Код var OS = {x:100, y:100}, A = { begin:{x:110, y:94}, end:{x:105, y:104} }, result = {x:undefined, y:100} var x = A.begin.x-A.end.x //5 var y = A.begin.y - A.end.y //-10 var deltaH = A.begin.y - OS.y //-6 var delta = y/deltaH // 1.6666666 if(A.begin.x > A.end.x){ result.x = A.begin.x - ~~(x/delta); }else{ result.x = A.begin.x + ~~(x/delta); }