Разветляющиеся алгоритмы: определить, являются ли заданные треугольники подобными - C (СИ)
Формулировка задачи:
заданы длины двух сторон треугольников. определить являются ли они подобными если да коэффициент пропорциональности
Решение задачи: «Разветляющиеся алгоритмы: определить, являются ли заданные треугольники подобными»
textual
Листинг программы
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
#define EPSILON 0.000001
typedef struct
{
double alpha;
double beta;
double gamma;
} TTriangeAngles;
typedef struct
{
double a;
double b;
double c;
TTriangeAngles angles;
} TTriangle;
void CalculateAngles(TTriangle* const trianglePtr)
{
double a = trianglePtr->a;
double b = trianglePtr->b;
double c = trianglePtr->c;
trianglePtr->angles.alpha = acos((b * b + c * c - a * a) / (2 * b * c));
trianglePtr->angles.beta = acos((a * a + c * c - b * b) / (2 * a * c));
trianglePtr->angles.alpha = (trianglePtr->angles.alpha * 180) / M_PI;
trianglePtr->angles.beta = (trianglePtr->angles.beta * 180) / M_PI;
trianglePtr->angles.gamma = 180 - (trianglePtr->angles.alpha +
trianglePtr->angles.beta);
}
int AreTrianglesSimilar(const TTriangle triangle1, const TTriangle triangle2)
{
int areSimilar = 0;
int areAlphasEqual = 0;
int areBetasEqual = 0;
int areGammasEqual = 0;
areAlphasEqual = (abs(triangle1.angles.alpha - triangle2.angles.alpha)
< EPSILON);
areBetasEqual = (abs(triangle1.angles.beta- triangle2.angles.beta)
< EPSILON);
areGammasEqual = (abs(triangle1.angles.gamma - triangle2.angles.gamma)
< EPSILON);
if (areAlphasEqual && areBetasEqual && areGammasEqual)
{
areSimilar = 1;
}
return areSimilar;
}
double GetSimilarityCoefficient(const TTriangle triangle1,
const TTriangle triangle2)
{
return triangle1.a / triangle2.a;
}
int main(void)
{
TTriangle triangle1;
TTriangle triangle2;
triangle1.a = 8.0;
triangle1.b = 8.0;
triangle1.c = 6.0;
triangle2.a = 4.0;
triangle2.b = 4.0;
triangle2.c = 3.0;
CalculateAngles(&triangle1);
CalculateAngles(&triangle2);
if (AreTrianglesSimilar(triangle1, triangle2))
{
printf("Triangles are similar, coeff: %.4f\n",
GetSimilarityCoefficient(triangle1, triangle2));
}
else
{
printf("Triangles are not similar!\n");
}
return 0;
}