-
- Например угол (его косинус в квадрате, чтоб от корня и арктангенса избавиться) между векторами в 3d декартовых координатах еле умещается в 32 бита (и не умещается, если нужно сильно меньше градуса). Имеется ввиду, разница крайних значений (очень fk0(102 знак., 11.04.2012 18:54)
- По моему проще остаться в аналитической геометрии. Если углы в радианах, то до 1/6рад косинус и синус считаются без тригонометрии. (Если это картография, то будут в основном такие углы, и точность там 15 процентов для углов рулит). - Ациль Шифер(12.04.2012 14:14)
- Есть декартовы кординаты. Два вектора. Надо понять, что угол между ними стал больше 1 градуса. Как? (может быть 0..180). - fk0(12.04.2012 14:38)
- Плохо понимаю проблему, но может так. sbb(546 знак., 13.04.2012 20:06)
- Опс, фигню написал, случай то трехмерный. sbb(324 знак., 14.04.2012 22:59)
- tan x примерно равен х... - Ациль Шифер(14.04.2012 01:06)
- Масштабировать вектора к одинаковому модулю. Потом, вспомнив из теоремы синусов, что стягивающая сторона пропорциональна углу, проверять модуль разности масштабированных векторов. Всё. Галимый Пифагор и матричное умножение. Можно даже корни зазря Д.ARMоед(52 знак., 13.04.2012 09:35)
- Вот первое вообще непонятно как сделать. Сейчас <a,b>=|a|*|b|*cos(a,b) ==> if (K* <a,b> * abs( <a,b> ) < |a|^2*|b|^2 ) then..., где в угловых скобках скалярное произведение, а K == 1/cos(a,b). Точно эта теорема синусов нужна? А fk0(143 знак., 13.04.2012 11:02)
- fk0, зачем тормозишь? Хорошее решение предложено. - SciFi(13.04.2012 11:18)
- Теорему синусов и углы считать вообще не нужно! Считаешь модуль разности масштабированных векторов или его квадрат и сравниваешь с заранее посчитанным для 1 градуса(типа порог). Д.ARMоед(165 знак., 13.04.2012 11:11)
- Нужен единичный вектор для того. Как я его получу без деления? - fk0(13.04.2012 12:19)
- Зачем делить? Считаешь скалярное произведение (a,b), фильтруешь по знаку, возводишь в квадрат, сравниваешь с (а,а)*(b,b)*(cos(1)^2) - AlexBi(13.04.2012 12:30)
- См. ссылку. По-моему именно это и сделано уже. - fk0(13.04.2012 12:44, ссылка)
- Да, там тоже самое, только у "К" косинус магического угла должен быть в квадрате. - AlexBi(13.04.2012 15:49)
- Может быть, использовать векторное произведение вместо скалярного? - SciFi(13.04.2012 13:19)
- Векторное даст синус, а он может быть и плюс и минус, и углы 180 и 0 не различт. - AlexBi(13.04.2012 15:50)
- Легко отличить 0 и 180: сказано, что модули примерно равны, то есть берём сумму векторов и сравниваем по модулю с одним из них (причём можно халтурно, взяв сумму модулей координат). Если ~0, то угол 180, если ~2*m, то угол 0. - SciFi(13.04.2012 16:00)
- Это получается мы сперва создали себе трудности (использовав синус), а потом их преодолеваем. Лучше сразу взять косинус, он даст то, что надо, без дополнительных проблем. - AlexBi(13.04.2012 16:23)
- Как отличить 75 градусов от 105? - fk0(13.04.2012 16:18)
- Нафиг? Вроде бы только 1 градус нужно было ловить. - SciFi(13.04.2012 16:21)
- Легко отличить 0 и 180: сказано, что модули примерно равны, то есть берём сумму векторов и сравниваем по модулю с одним из них (причём можно халтурно, взяв сумму модулей координат). Если ~0, то угол 180, если ~2*m, то угол 0. - SciFi(13.04.2012 16:00)
- Векторное даст синус, а он может быть и плюс и минус, и углы 180 и 0 не различт. - AlexBi(13.04.2012 15:50)
- См. ссылку. По-моему именно это и сделано уже. - fk0(13.04.2012 12:44, ссылка)
- Можно просто уравнять модули. Но для этого необходим корень, ЕМНИП. - SciFi(13.04.2012 12:26)
- Точно. Корень же считать тоже ещё та забава. - fk0(13.04.2012 12:51)
- А квадраты модулей не равны? Д.ARMоед(51 знак., 13.04.2012 13:15 - 13:17, ссылка)
- Может быть я и туплю, но не вижу, как уравнять модули без корня. - SciFi(13.04.2012 13:30)
- Вы не тупите, корень для масштабирования придётся вычислить. А при сравнении можно обойтись без корня. Д.ARMоед(14.04.2012 08:53)
- Можно масштабировать без корня. sbb(836 знак., 14.04.2012 23:42)
- Не въехал. В каком знаменателе квадраты модулей? Д.ARMоед(59 знак., 15.04.2012 14:42)
- Если избавлятся от корня при вычислении модуля, то нужно обе части этого выражения возвести в квадрат. В знаменателе будет произведение квадратов модулей. - sbb(15.04.2012 22:50)
- Похоже, я сегодня на ручнике езжу :) Д.ARMоед(341 знак., 15.04.2012 23:08)
- Если избавлятся от корня при вычислении модуля, то нужно обе части этого выражения возвести в квадрат. В знаменателе будет произведение квадратов модулей. - sbb(15.04.2012 22:50)
- Не въехал. В каком знаменателе квадраты модулей? Д.ARMоед(59 знак., 15.04.2012 14:42)
- Можно масштабировать без корня. sbb(836 знак., 14.04.2012 23:42)
- Вы не тупите, корень для масштабирования придётся вычислить. А при сравнении можно обойтись без корня. Д.ARMоед(14.04.2012 08:53)
- Имеется ввиду, norm(A.*A.*(norm(B)^2)) == norm(B.*B.*(norm(A)^2)) ? Надо подумать... - fk0(13.04.2012 13:24)
- Может быть я и туплю, но не вижу, как уравнять модули без корня. - SciFi(13.04.2012 13:30)
- А квадраты модулей не равны? Д.ARMоед(51 знак., 13.04.2012 13:15 - 13:17, ссылка)
- Точно. Корень же считать тоже ещё та забава. - fk0(13.04.2012 12:51)
- Зачем делить? Считаешь скалярное произведение (a,b), фильтруешь по знаку, возводишь в квадрат, сравниваешь с (а,а)*(b,b)*(cos(1)^2) - AlexBi(13.04.2012 12:30)
- Нужен единичный вектор для того. Как я его получу без деления? - fk0(13.04.2012 12:19)
- Вот первое вообще непонятно как сделать. Сейчас <a,b>=|a|*|b|*cos(a,b) ==> if (K* <a,b> * abs( <a,b> ) < |a|^2*|b|^2 ) then..., где в угловых скобках скалярное произведение, а K == 1/cos(a,b). Точно эта теорема синусов нужна? А fk0(143 знак., 13.04.2012 11:02)
- Если просто не ноль градусов... векторное произведение не ноль. всё. шесть умножений три вычитания(сравнения) - Ациль Шифер(13.04.2012 08:35)
- Плохо понимаю проблему, но может так. sbb(546 знак., 13.04.2012 20:06)
- Есть декартовы кординаты. Два вектора. Надо понять, что угол между ними стал больше 1 градуса. Как? (может быть 0..180). - fk0(12.04.2012 14:38)
- По моему проще остаться в аналитической геометрии. Если углы в радианах, то до 1/6рад косинус и синус считаются без тригонометрии. (Если это картография, то будут в основном такие углы, и точность там 15 процентов для углов рулит). - Ациль Шифер(12.04.2012 14:14)
- Например угол (его косинус в квадрате, чтоб от корня и арктангенса избавиться) между векторами в 3d декартовых координатах еле умещается в 32 бита (и не умещается, если нужно сильно меньше градуса). Имеется ввиду, разница крайних значений (очень fk0(102 знак., 11.04.2012 18:54)