вычислительная геометрия — cos ^ -1 в c ++ неверное значение

Я пытаюсь получить градусы для угла a в своей программе, но я получаю ответы тысячами, не связанные с треугольником.
Я не могу решить это.
я правильно использую cos ^ -1

Моя формула A = cos ^ (- 1) ⁡ ((b ^ 2 + c ^ 2-a ^ 2) / 2bc)

Это мой код до сих пор.

// ConsoleApplication6.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"#include "math.h"
/* enter three variables a, b ,c to create a triangle*/
int main()
{
double a;               /*insert dimensions of side a*/
double b;               /*insert dimensions of side b*/
double c;               /*insert dimensions of side c*/
double perimeter;       /*variable for the perimeter of a triangle*/
double p;               /*variable for the semi perimeter of a triangle*/
double s;               /*variable for the area of a triangle*/
double PI = 3.14259;    /*Constant for PI*/
double angleA;          /* Variable for angle A*/
double angleB;          /* Variable for angle B*/
double angleC;          /* Variable for angle C*//* Get the user to enter the dimensions of a*/
printf_s("enter the  dimensions of a: ");
scanf_s("%lf", &a);

/* Get the user to enter the dimensions of b*/
printf_s("enter the  dimensions of b: ");
scanf_s("%lf", &b);

/* Get the user to enter the dimensions of c*/
printf_s("enter the  dimensions of c: ");
scanf_s("%lf", &c);

/* Conditions of a triangle*/
if (a+b > c && a+c > b && b+c > a)

printf_s("True\n");                    /* Display True if able to make a triangle*/

else printf_s("False\n");                   /* Display false if unable to make a triangle*//*output total perimeter*/
perimeter = a + b + c;printf_s("The perimeter of the triangle is: %lf\n", perimeter);

/*output total area*/
p = (a + b + c) / 2;
s = sqrt(p*(p - a)*(p - b)*(p - c));

printf_s("The area of the triangle is: %lf\n", s);

/*output angle A*/

angleA = acos(-1)*(pow(b,2) + pow(c,2) - pow(a,2)) / 2 * a * b/180 * PI;

printf_s("The angle of A is: %lf degrees\n", angleA);return 0;
}

0

Решение

Обратите внимание, что это угол между сторонами a и c (напротив b)

введите описание изображения здесь

Вы должны написать формулу для угла между b и c, подобную этой:

double  cosA = 0.5*( b / c + c / b  - a*a/(b*c));

//  short-circuit and sanitize argument of acos() here.. it must be -1...+1 range
//  but math rounding or wrong arguments (impossible triangle?) may cause
// it to go outside that range.
double  angleA  = acos(cosA);

Обратите внимание, что результат в радианах.

2

Другие решения

это здесь: экоса (-1) Выглядит странно в вашем уравнении, вам не нужны акос -1 пи радиан …

так 1-я вещь

соз (х) ^ (- 1) такой же как 1 / COS (х) или просто с (х)

тебе нужно написать это А = соз ^ (- 1) ⁡ ((б ^ 2 + с ^ 2-а ^ 2) / 2bc) должным образом

если вы имеете в виду обратную функцию сов (х) ака экоса (х) тогда аргумент -1 неверен в вашем уравнении

Ваше окончательное уравнение должно выглядеть так:

double  angleA  = acos(x);

где х должен быть рассчитывает объявление:

(a*a + c*c -b*b)/(2*a*c)

То, что вы пытаетесь сделать, это вычислить информацию о треугольнике, зная размеры сторон (Формула цапли)

введите описание изображения здесь

угол между этими сторонами рассчитывается по

введите описание изображения здесь

Итак, 3 угла, которые вам нужны:

angleAB = acos((a*a + b*b - c*c) / (2 * a * b));
std::cout << "The angle of A is: " << angleAB << " radians  " << std::endl;
std::cout << "or: " << angleAB * 180 / PI << " degrees  " << std::endl;

angleBC = acos((c*c + b*b - a*a) / (2 * c * b));
std::cout << "The angle of B is: " << angleBC << " radians  " << std::endl;
std::cout << "or: " << angleBC * 180 / PI << " degrees  " << std::endl;

angleCA = acos((c*c + a*a - b*b) / (2 * c * a));
std::cout << "The angle of B is: " << angleCA << " radians  " << std::endl;
std::cout << "or: " << angleCA * 180 / PI << " degrees  " << std::endl;
0

Ответ был

angleA = acos(((b*b) + (c*c) - (a*a)) / (2 * b*c)) * 180 / PI;

printf_s("The angle of A is: %lf degrees\n", angleA);

/*output angle B*/

angleB = acos(((a*a) + (c*c) - (b*b)) / (2 * a*c)) * 180 / PI;

printf_s("The angle of B is: %lf degrees\n", angleB);

/*output angle B*/

angleC = 180 - (angleA + angleB);

printf_s("The angle of C is: %lf degrees\n", angleC);

/*output longest side*/
0