Здраствуйте. Не понимаю как решить задачу на СИ

Заданы координаты вершин четырехугольника. Вывести их в порядке обхода по часовой стрелке. Главная проблема в том, что в задаче можно использовать только условные операторы, массивы и функции нельзя использовать, задача из вуза для закрепления темы про условные операторы, не понимаю как можно вывести координаты по часовой при помощи условных операторов.

  • Комментарий преподавателя: Предлагаю 2 варианта.
  1. Найдите координаты центра множества - среднее арифметическое по x и y, она будет внутри четырехугольника (рекомендую сразу рисовать). Если от этой точки построить отрезки (векторы) до каждой вершины, то можно найти углы наклона этих отрезков. Теперь берем эти углы от большего к меньшему (находим самый большой, потом и оставшихся следующий самый большой и потом наибольший из двух оставшихся) и выводим координаты вершин в этом же порядке.
  2. Берем первую точку в качестве начала, а остальные три - как концы векторов. Находим попарные векторные произведения и так определяем, какой вектор левее всех, его конец - это вторая точка. Аналогично из оставшихся двух определяем левый (третья точка) и остается последняя точка.

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

В предположении что все точки - вершины выпуклого четырёхугольника, задачу решает сортировка трёх точек по углу вокруг первой:

#include <stdio.h>

int main() {
    int x0, y0, x1, y1, x2, y2, x3, y3;
    scanf("%d%d%d%d%d%d%d%d", &x0, &y0, &x1, &y1, &x2, &y2, &x3, &y3);

    if ((x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) > 0) {
        int tmp = x1;
        x1 = x2;
        x2 = tmp;
        tmp = y1;
        y1 = y2;
        y2 = tmp;
    }

    if ((x1 - x0) * (y3 - y0) - (x3 - x0) * (y1 - y0) > 0) {
        int tmp = x1;
        x1 = x3;
        x3 = tmp;
        tmp = y1;
        y1 = y3;
        y3 = tmp;
    }

    if ((x2 - x0) * (y3 - y0) - (x3 - x0) * (y2 - y0) > 0) {
        int tmp = x2;
        x2 = x3;
        x3 = tmp;
        tmp = y2;
        y2 = y3;
        y3 = tmp;
    }
    printf("%d %d\n%d %d\n%d %d\n%d %d\n", x0, y0, x1, y1, x2, y2, x3, y3);
}
→ Ссылка