#математика #геометрия
Есть два вектора A и B, заданные длиной и углом (от 0 до 360 градусов). Нужно найти угол вектора C, который получился в результате разницы векторов A и B. Я пытался. Но уверен что это принципиально неверно. Vector Computing::lateralDem(Vector v1, Vector v2) { double z = pow(v1.value, 2) + pow(v2.value, 2) - 2 * v1.value*v2.value*cos(v1.angle + PI - v2.angle); // --длина(по теореме косинусов) double c = asin(sin(v1.angle + PI - v2.angle) * v2.value / z) - v1.angle; // --угол(по теореме синусов) return{ c,sqrt(z) }; }
Ответы
Ответ 1
Vector Computing::Subtract(Vector v1, Vector v2) { // calculates new vector as (v2 - v1) double a1 = v1.angle * PI / 180; double a2 = v2.angle * PI / 180; double x1 = v1.value * cos(a1); double y1 = v1.value * sin(a1); double x2 = v2.value * cos(a2); double y2 = v2.value * sin(a2); double x3 = x2 - x1; double y3 = y2 - y1; double value3 = sqrt(x3*x3 + y3*y3); double angle3 = atan2(y3, x3); return { value = value3, angle = angle3 / PI * 180 }; } Павел, прошу прощения, я погорячился и был неправ. Разность двух векторов это вектор, соединяющий их концы - направленный от конца "вычитаемого" к концу "уменьшаемого". То есть в Вашем последнем примере v1 = { 0, 100 }; v2 = { 180, 100 }; v3 = v2 - v1 = { 180, 200 }; Что касается отрицательных углов, диапазон значений, возвращаемых функцией atan2, - от -PI до PI. Если Вам нужны значения от нуля до 2PI, просто прибавьте PI к отрицательному результату.Ответ 2
Переход в декартову систему, вычитание, переход в полярную Думаю, далее понятно, как посчитать угол?
Комментариев нет:
Отправить комментарий