Даны 4 последовательные точки, как узнать что образуют они параллелограмм? Нашел длину сторон и сравниваю их, теперь пишу код на расчет суммы углов прилежащей к одной стороне(=180гр.).
Хотелось бы еще посоветоваться на дополнительные проверки, заранее извиняюсь за плохие знания геометрии#include
#include
#include
struct point_data {
float x;
float y;
};
int main()
{
struct point_data point[4];
point[0].x = 0;
point[0].y = 0;

point[1].x = 4;
point[1].y = 3;

point[2].x = 4;
point[2].y = 2;

point[3].x = 3;
point[3].y = 0;

float a, b, c, d;

a = sqrt(pow(point[1].x - point[0].x, 2) + pow(point[1].y - point[0].y, 2));
b = sqrt(pow(point[2].x - point[1].x, 2) + pow(point[2].y - point[1].y, 2));
c = sqrt(pow(point[3].x - point[2].x, 2) + pow(point[3].y - point[2].y, 2));
d = sqrt(pow(point[0].x - point[3].x, 2) + pow(point[0].y - point[3].y, 2));
//Пока что только один угол
float lp = point[0].x * point[1].x + point[0].y * point[1].y;
a = sqrt(pow(point[0].x, 2) + pow(point[0].y, 2));
b = sqrt(pow(point[1].x, 2) + pow(point[1].y, 2));
printf("%f", lp/(a*b));

21 Авг 2019 в 06:07
142 +1
0
Ответы
1

Вот дополнительные проверки, которые вы можете сделать для определения, являются ли 4 точки вершинами параллелограмма:

Проверьте, что сумма противоположных сторон равна:
a + c == b + d

Проверьте, что диагонали параллелограмма делят друг друга пополам и пересекаются под прямым углом:
(point[0].x + point[2].x) / 2 == (point[1].x + point[3].x) / 2
(point[0].y + point[2].y) / 2 == (point[1].y + point[3].y) / 2

Проверьте, что углы при вершинах параллелограмма равны:
angle1 = atan2(point[1].y - point[0].y, point[1].x - point[0].x) - atan2(point[2].y - point[1].y, point[2].x - point[1].x);
angle2 = atan2(point[2].y - point[1].y, point[2].x - point[1].x) - atan2(point[3].y - point[2].y, point[3].x - point[2].x);
angle3 = atan2(point[3].y - point[2].y, point[3].x - point[2].x) - atan2(point[0].y - point[3].y, point[0].x - point[3].x);
angle4 = 2 * M_PI - angle1 - angle2 - angle3;

if(fabs(angle1 - angle2) < 0.001 && fabs(angle2 - angle3) < 0.001 && fabs(angle3 - angle4) < 0.001 && fabs(angle4 - angle1) < 0.001){
printf("Эти точки образуют параллелограмм");
} else {
printf("Эти точки не образуют параллелограмм");
}

20 Апр 2024 в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир