Даны 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));
Вот дополнительные проверки, которые вы можете сделать для определения, являются ли 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("Эти точки не образуют параллелограмм");
}