A
A
azazlo2022-01-16 15:01:01
C++ / C#
azazlo, 2022-01-16 15:01:01

How to find the intersection points of 2 figures with ++?

The task is to randomly set the points of a rectangle, triangle and circle. I did this. I can't find the intersection points of the rectangle and triangle.

#include <stdlib.h>
#include <ctime>
// нужен для вызова функции time()
#include <time.h>
using namespace std;

//задаем структуру точек
struct Point
{
    int x;
    int y;
};

//структурируем точки треугольника
struct Triangle
{
    Point p1;
    Point p2;
    Point p3;
};

//структурируем точки прямоугольника
struct Rectangle
{
    Point p1;
    Point p2;
    Point p3;
    Point p4;
};

//структурируем центр и радиус окружности
struct Circle
{
    Point p;
    int radius;
};

//функция генерации рандомного числа
int GetRandomint(int min,int max)
{
    return (min + rand() % (max-min+1));
};

// задаем случайную генерацию ординаты и абсциссы точки
Point GetRandomPoint(int min,int max) {
    Point p;
    p.x = GetRandomint(min,max);
    p.y = GetRandomint(min,max);
    return p;
}

//задаем функцию генерации трех точек треугольника
 Triangle GetRandomTriangle(int min,int max)
{
    Triangle trian;
    trian.p1 = GetRandomPoint( min,max);
    trian.p2 = GetRandomPoint( min, max);
    trian.p3.x = trian.p2.x;
    trian.p3.y = trian.p1.y;
        return trian;
}

 //печать координаты точки
 void Print_point(Point p)
 {
    cout << "p(" << p.x << ";" << p.y << ")/n";
 }

 // печать координат треугольника
 void Print_triangle(Triangle trian)
 {
    Print_point(trian.p1);
    Print_point(trian.p2);
    Print_point(trian.p3);
    cout << "\n\n";
 }

 //выводим точки прямоугольника на экран( обращаем внимание,что третья точка строится по такому принципу: ордината третьей точки равна ординате 2-ой точки
 //а ее абсцисса  = абсциссе 1-ой точки) - таким образом создастся перпендикуляр и прямой угол нашему треугольнику
 void Print_trian(Triangle trian)
 {
    cout << trian.p1.x << " " << trian.p1.y << "\n";
    cout << trian.p2.x << " " << trian.p2.y << "\n";
    cout << trian.p3.x << " " << trian.p3.y << "\n\n";
 }


 //рандом точки прямоугольника (2-ух точек - они образуют диагональ)
 Rectangle GetRandomRectangle(int min,int max)
 {
    Rectangle rect;
    rect.p1 = GetRandomPoint(min,max);
    rect.p2 = GetRandomPoint(min,max);
    rect.p3.x = rect.p2.x;
    rect.p3.y = rect.p1.y;
    rect.p4.y = rect.p2.y;
    rect.p4.x = rect.p1.x;
    return rect;
 }

 // печать координат прямоугольника
 void Print_rectangle(Rectangle rect)
 {
    Print_point(rect.p1);
    Print_point(rect.p2);
    Print_point(rect.p3);
    Print_point(rect.p4);
    cout << "\n\n";
 }

 //выводим точки на экран на двук осях координат (в данном случае принцип идентичен приципу с прямоуг.треугольником)
 void Print_rectan(Rectangle rect)
 {
    cout << rect.p1.x << " " << rect.p1.y << "\n";
    cout << rect.p2.x << " " << rect.p2.y << "\n";
    cout << rect.p3.x << " " << rect.p3.y << "\n";
    cout << rect.p4.x << " " << rect.p4.y << "\n\n";
 }

 //Задаем рандомный центр и радиус (для центра - точку,для радиуса - целочисленное значение)
 Circle GetRandomCircle(int min,int max)
 {
    Circle circle;
    circle.p = GetRandomPoint(min,max);
    circle.radius = GetRandomint(min,max);
    return circle;
 }

 //Печать центра и радиуса
 void Print_cir(Circle circle)
    {
    Print_point(circle.p);
    cout << "radius = " << circle.radius << "\n";
    }

 //Выводим центр и радиус на экран
 void Print_circle(Circle circle)
 {
    cout << circle.p.x << " " << circle.p.y << "\n";
    cout << circle.radius << " " << "\n\n";
 }

 int main()
 {
    //подключаем русский язык и выводим конечный результат получения точек вершин наших фишур
    setlocale(LC_CTYPE, "rus");
    srand(time(NULL));
    Triangle trian = GetRandomTriangle(0,6);
    Rectangle rect = GetRandomRectangle(-10,10);
    Circle circle = GetRandomCircle(1,8);
    cout << "Координаты треугольника:\n";
    Print_trian(trian);
    cout << "Координаты прямоугольника:\n";
    Print_rectan(rect);
    cout << "Координаты центра окружности и его радиус:\n";
    Print_circle(circle);
    return 0;

 }

Answer the question

In order to leave comments, you need to log in

2 answer(s)
W
Wataru, 2022-01-16
@azazlo

Here it is well painted about the intersection of two segments. You only need to iterate over all pairs of segments of the rectangle X of the triangle.
upd: The same site has everything you need to check the intersection of a circle and segments.

A
Adamos, 2022-01-16
@Adamos

I can't find the intersection points of a rectangle and a circle

Trouble. Maybe search - in a search engine?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question