Загрузка...

People help with a practical task please C ++

Thread in C/C++ created by Morzhik89 Feb 8, 2023. (bumped Feb 12, 2023) 267 views

  1. Morzhik89
    Morzhik89 Topic starter Feb 8, 2023 Либо ты льешь трафик, либо ты являешься трафиком 117 Oct 22, 2019
    Цель работы. Построить выпуклый многоугольник по алгоритму Джарвиса, методу обхода Грэхема
    Постановка задачи. Пусть на плоскости дано множество точек. Нужно построить выпуклый многоугольник, чтобы для любой точки из заданного множества было верно одно из трех утверждений:
    а) точка является вершиной построенного многоугольника;
    б) точка принадлежит одной из сторон многоугольника;
    в) точка лежит внутри многоугольника.
    [IMG]
     
  2. NightAngel
    NightAngel Feb 11, 2023 7 Dec 13, 2021
    могу сделать, напиши в тг, поговорим подробнее.
     
  3. Darkway01
    Darkway01 Feb 13, 2023 С научной точки зрения традиции для идиотов. 23 Apr 14, 2021
    Вот
    Code
    #include <bits/stdc++.h>
    using namespace std;

    struct Point {
    int x, y;
    bool operator < (const Point &p) const {
    return x < p.x || (x == p.x && y < p.y);
    }
    };

    int cross(Point A, Point B) {
    return A.x * B.y - A.y * B.x;
    }

    vector<Point> jarvis(vector<Point> P) {
    int n = P.size();
    vector<Point> H(2 * n);

    sort(P.begin(), P.end());

    int k = 0;
    for (int i = 0; i < n; i++) {
    while (k >= 2 && cross(H[k - 2] - H[k - 1], P[i] - H[k - 1]) < 0)
    k--;
    H[k++] = P[i];
    }

    for (int i = n - 2, t = k + 1; i >= 0; i--) {
    while (k >= t && cross(H[k - 2] - H[k - 1], P[i] - H[k - 1]) < 0)
    k--;
    H[k++] = P[i];
    }

    H.resize(k - 1);
    return H;
    }

    int main() {
    int n;
    cin >> n;
    vector<Point> P(n);
    for (int i = 0; i < n; i++)
    cin >> P[i].x >> P[i].y;

    vector<Point> H = jarvis(P);
    for (int i = 0; i < H.size(); i++)
    cout << H[i].x << " " << H[i].y << endl;
    return 0;
    }
     
    1. Morzhik89 Topic starter
Loading...
Top