@Danivar

Как найти точки внутри фигуры, за пределами фигуры и на фигуре?

Дана фигура наполовину прямоугольник наполовину ромб. Даны точки x (-150: 150) и y (-250; 250). Найти точки внутри фигуры, за пределами фигуры и на фигуре.
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <math.h>
using namespace std;

struct Point {
    int x, y;
};

struct Count {
    int k1 = 0, k2 = 0, k3 = 0;
};

void array_input(Point* t, int n)
{
    srand(static_cast<unsigned int>(time(0)));
    for (int i = 0; i < n; ++i) {
       t[i].x = rand() % 501 - 250;
        t[i].y = rand() % 301 - 150;
    }

    cout << endl;
}

void array_output(Point* t, int n)
{
    for (int i = 0; i < n; ++i) {
        cout << "x: " << t[i].x << "\t" << setw(4) << " y: " << t[i].y << endl;
    }
}

Count number_of_points(Point* t, int n)
{

    Count out;
    for (int i = 0; i < n; ++i) {
            
	
        
          if (t[i].x < 150 && abs(t[i].y) < 200 && 1.5 * abs(t[i].y) + abs(t[i].x) < 150){
            out.k1++;
        }
        
        	else if (abs(t[i].x) > 150|| abs(t[i].y) > 200 || 1.5 * abs(t[i].y) + abs(t[i].x) > 150) {
            out.k3++;
        }
		
		else {
			out.k2++;
		}
    }

    return out;
}

int main()
{
	setlocale(LC_ALL, "rus");
    int n = 10;
    Point t[n];
    Count out;

    array_input(t, n);
    array_output(t, n);
    out = number_of_points(t, n);
    cout <<"Внутfdри фигуры: " << out.k1 << endl;
    cout <<"На фигуре: " << out.k2 << endl;
    cout <<"За пределами фигуры: " << out.k3 << endl;

    return 0;
}
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Все подобные задачи решаются через расчет ориентации точки на плоскости относительно вектора (в данном случае это сторона ромба). Знак векторного произведения даёт нам ориентации. И дальше - дело техники. Проверить все стороны и доказать что точка - по одну сторону ( знак плюс или минус - зависит от базиса и системы координат ). Его проще вычислить экспериментально за 2 проверки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы