phantom4
Удален
|
Даны координаты двух отрезков на плоскости. Начальная точка у них общая (то есть имеются координаты (x,y) трех точек). Необходимо найти синус угла между этими отрезками. (косинус находится легко с помощью формулы скалярного произведения векторов). ПОМОГИТЕ!!!
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 24 фев. 2004 16:28 | IP
|
|
VF
Administrator
|

(sin a)^2 + (cos a)^2 = 1
|
Всего сообщений: 3110 | Присоединился: май 2002 | Отправлено: 25 фев. 2004 9:33 | IP
|
|
cepesh
Удален
|
ну можно, как админ сказал, а можно иначе. Есть два вектора a и b с координатами (a1, a2) и (b1, b2) Их векторное произведение есть определитель матрицы (обозначим М), составленной этими координатами. Так вот определитель этой матрицы по модулю равен |a||b||sin(alpha)| то есть alpha = arcsin(|det(M)|/|a||b|) Понятно, что мв рассматриваем острй угол между отрезками. Вот так.
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 25 фев. 2004 14:16 | IP
|
|
phantom4
Удален
|
Спасибо VF и cepesh. Проблемма в том, что необходимо знать ЗНАК синуса (это необходимо для того чтобы понять - угол между векторами больше или меньше 180). Если есть возможность, помогите советом КАК: 1. НЕ ТЕРЯТЬ знак синуса (можно даже значение потерять но не знак) 2. Или как зная два вектора выяснить какой между ними угол, острый или тупой. Спасибо.
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 29 фев. 2004 23:20 | IP
|
|
VF
Administrator
|

Ты сам из изображения двух векторов сможешь понять, угол между ними больше 180 или меньше? Если скажешь, что меньше, то я покажу другой и скажу, что он больше и я рассматривал именно его. Если больше - аналогично можно выбрать другой угол. Поэтому за угол между векторами принимают меньший из получившихся углов. Он в любом случае острый и сравнивать его можно с 90, но никак не 180 градусами.
|
Всего сообщений: 3110 | Присоединился: май 2002 | Отправлено: 1 марта 2004 17:22 | IP
|
|
phantom4
Удален
|
VF - извини что не конкретно объясняю задачу. Итак, из двух векторов я беру конкретный один и должен высчитать знак синуса угла со вторым (против часовой стрелки). Это надо для того чтобы последовательно проанализировать каждый внутренний угол многоугольника и сделать вывод больше он 180 или меньше.
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 1 марта 2004 23:14 | IP
|
|
palva
Новичок
|
Тогда делай, как сказал cepesh. Только убери модули от детерминанта, получишь синус со знаком: alpha = arcsin(det(M)/|a||b|)
|
Всего сообщений: 20 | Присоединился: март 2004 | Отправлено: 2 марта 2004 13:29 | IP
|
|
VF
Administrator
|

Можно найти разность между векторами. Проанализировав, в каком направлении направлен вектор разности (по часовой или против), можно определить и угол в нужном направлении.
|
Всего сообщений: 3110 | Присоединился: май 2002 | Отправлено: 2 марта 2004 14:05 | IP
|
|
palva
Новичок
|
...тут опять возникнет вопрос как определить направление. По моему, не обойтись без одновременного вычисления синуса и косинуса. Т.е. нужно вычислить sin = det(M)/|a||b| alfa = arccos((a,b)/|a||b|) А потом заменить alfa на 2*пи - alfa, если синус отрицательный Правда, синус можно не вычислять. Вычислить только det(M), поскольку нам нужен только знак синуса. Возникает дополнительный вопрос: можно ли сэкономить на вычислении определителя, если нам нужен только его знак? Для n=2, по-моему, нельзя. А если n=3? Правда, это не относится к вопросу заданному в форуме.
|
Всего сообщений: 20 | Присоединился: март 2004 | Отправлено: 2 марта 2004 14:32 | IP
|
|
phantom4
Удален
|
VF, palva спасибо. Попробую. Придется вспомнить все. и матрицы и детерминанты. Нельзя забывать математику! дибилом становишься!
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 2 марта 2004 23:33 | IP
|
|