рассмотрите этот код:
Point findIntersection(Line l1, Line l2)
{
int T1, T2;
T2 = (l2.d.x*(l1.p.y-l2.p.y) + l2.d.y*(l2.p.x-l1.p.x))/(l1.d.x*l2.d.y - l1.d.y*l2.d.x);
T1 = (l1.p.x+l1.d.x*T2-l2.p.x)/l2.d.x;
if (T1>0 && 0<T2<1) {
return {l2.p.x+l2.d.x*T1, l2.p.y+l2.d.y*T1};
}
}
(полный код http://pastebin.com/M6G40F4M)
этот код вызывает исключение с плавающей запятой в строках 3 и 4 (и 13 и 14 в большом фрагменте кода). Мой вопрос в том, почему это происходит, и как правильно найти место пересечения двух линий. Я знаю, что эти ошибки обычно возникают при делении на ноль, но я не уверен, где я это делаю и как это можно предотвратить.
(l1.d.x*l2.d.y - l1.d.y*l2.d.x)
может быть0
. Не так ли? Также возможно, чтоl2.d.x
равно нулю. Перед делением нужно убедиться, что знаменатель не равен нулю. - person R Sahu   schedule 10.05.2016T1>0 && 0<T2<1
не выполняется. - person M.M   schedule 10.05.2016