![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
прежде чем писать код, надо вывести уравнение для точки пересечения по вашему условию =) За вас это сделать?
Будет уравнение - помогу с кодом, хотя это уже элементарно. Добавлено через 2 минуты Начать код надо с этого, я думаю. |
|
|||||
|
Возможно надо представить b через искомую точку?
b1 = y0 - x0*tg(a1) b2 = y0 - x0*tg(a2) И тогда: y1 - x1*tg(a1) = y0 - x0*tg(a1) y2 - x2*tg(a2) = y0 - x0*tg(a2) y1 - y0 = x1*tg(a1) - x0*tg(a1) y1 - y0 = (x1 - x0)*tg(a1) y0 = y1 - (x1 - x0) * tg(a1) y2 - x2*tg(a2) = y1 - (x1 - x0) * tg(a1) - x0 * tg(a2) y2 - x2*tg(a2) = y1 - x1 * tg(a1) - x0 * (tg(a1) - tg(a2)) x0 * (tg(a1) - tg(a2)) = y2 - x2*tg(a2) - y1 + x1 * tg(a1) x0 = (y2 - y1 - x2*tg(a2) + x1*tg(a1))/(tg(a1) - tg(a2)) y0 = y1 - (x1 - x0) * tg(a1) Вроде нигде не ошибся.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. Последний раз редактировалось GBee; 17.11.2011 в 01:25. Причина: Дописал |
|
|||||
|
Цитата:
х = (b1 - b2) / (tg(a2) - tg(a1)) y = (b1*tg(a2) - b2*tg(a1)) / (tg(a2) - tg(a1)) Но т.к. это точка пересечения двух прямых, а не лучей (помним в чем разница, да?) то надо проверить принадлженость этой точки каждому из лучей. Добавлено через 1 минуту А, да, перед вычислениями было бы еще неплохо проверить что а1 != а2, иначе деление на ноль возникнет (прямые/лучи параллельны) Добавлено через 26 минут Цитата:
Добавлено через 45 минут package { import flash.geom.Point; /** * ... * @author Ookami */ public class Ololo { public function findPoint(point1:Point, point2:Point, angle1:Number, angle2:Number):Point { var x:Number; var y:Number; var k1:Number = Math.tan(toRadians(angle1)); var k2:Number = Math.tan(toRadians(angle2)); if (angle1 == angle2) { trace("Прямые параллельны"); return null; } else { x = (point1.x - point2.x) / (k2 - k1); y = (point1.x * k2 - point2.x * k1) / (k2 - k1); trace("Прямые пересекаются в точке [" + x + ";" + y + "]"); return new Point(x, y); } } private function toRadians(degrees:Number):Number { return degrees * (Math.PI / 180); } } } Последний раз редактировалось Ookami; 17.11.2011 в 01:56. |
|
|||||
|
[+3 17.03.11]
Регистрация: Feb 2011
Сообщений: 27
|
в моей задаче лучи всегда пересекаются
![]() спасибо! |
|
|||||
|
[+1 15.11.10]
Регистрация: Jun 2005
Сообщений: 25
|
еще перед поиском пересечения неплохо проверить лучи на взаимную паралельность. А то при подсчете может случится деление на ноль. Это раз. А уж если это лучи... то даже пре их непаралельности они иногда не могут пересечься. Это тоже надо как-то проверять
|
|
|||||
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|