Я пытаюсь получить градусы для угла 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;
}
Обратите внимание, что это угол между сторонами 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);
Обратите внимание, что результат в радианах.
это здесь: экоса (-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;
Ответ был
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*/