|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergeii A. Golovatov 2:5020/400 30 Oct 2001 14:51:43 To : Nick Gusev Subject : Re: Алгоритм вычисления угла -------------------------------------------------------------------------------- Hi, Nick Gusev <kkb1@online.ru>! You wrote: > Господа, подскажите, пожалуйста программный алгоритм вычисления угла между > 2-мя прямыми, проведенными через 4 заданные точки. Hазовем нужный угол beta Допустим, даны четыре пары координат для этих 4х точек. 2 первые пары описывают 1ю прямую, 2 вторые -- соотв-но, 2ю: (x1,y1) (x2,y2), где x1 < x2 (x3,y3) (x4,y4), где x3 < x4 Если использовать для описания прямой формулу y(x) = a*x+b, то для твоей задачи достаточно для каждой прямой определить a, т.к., в данном случае, a = tg угла наклона прямой по отношению к оси абсцисс. Стало быть, a1 = (y2 - y1)/(x2 - x1); a2 = (y4 - y3)/(x4 - x3) Обрати внимание, что "иксы" вычитаются "из большего -- меньшее", а "игреки" -- в том же порядке, что и "иксы", независимо от соотношения между "игреками" (т.е., неважно, y2 < y1, или y2 > y1, если x2 > x1, то x2 - x1 и y2 - y1). Если полученное а отриц-е -- "падающая" прямая, угол отриц-й, наоборот -- "ратущая", угол -- соотв-но, полож-й. Естественно, с проверкой случаев x1 = x2, x3 = x4, В этом случае угол наклона соответствующей прямой alpha = 90 градусов. Теперь, если a1 и a2 получились одинаковыми, то можешь сразу объявлять beta = 0. Если нет -- находишь arctg(a1) и arctg(a2) (естественно, при x3 = x4 угол alpha = 90 градусов, разрыв области значений тангенсов), и, если направление положительного отсчета углов не сильно важно, то просто из большего угла вычитаешь меньший. PS: Hа практике, если для значений координат используются вещественные числа, то нужно проверять не x1 = x2, а abs(x1-x2) < epsilon, где значение "малости" epsilon зависит от выбранного/заданного типа вещественных чисел. PPS: Кстати, вопрос в том, какой именно угол нужен получить, потому как их 2;) И этот Beta можно всегда рассматривать как угол, дополняющий соседний до 180 градусов. Так что при желании нужно еще и это учесть;) -- Сергей Головатов, он же -- SergHeader@mail.ru Sergeii Golovatov, also known as SergHeader@mail.ru --- ifmail v.2.15dev5 * Origin: Fidolook Express 2.000 www.fidolook.da.ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/6577bb181a46.html, оценка из 5, голосов 10
|