@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;
}
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
@mayton2019
Ent. Software engineer. Oracle. SQL. BigData.
Все подобные задачи решаются через расчет ориентации точки на плоскости относительно вектора (в данном случае это сторона ромба). Знак векторного произведения даёт нам ориентации. И дальше - дело техники. Проверить все стороны и доказать что точка - по одну сторону ( знак плюс или минус - зависит от базиса и системы координат ). Его проще вычислить экспериментально за 2 проверки.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
НПК «Катрен» Новосибирск
от 130 000 ₽
СК-Информика Санкт-Петербург
от 90 000 до 110 000 ₽
НПК «Катрен» Новосибирск
от 130 000 ₽