-
- Вот первое вообще непонятно как сделать. Сейчас <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)