Задача состоит в том,чтобы задать рандомом точки прямоугольника,треугольника и окружности.это я сделал. Я не могу найти точки пересечения прямоугольника и треугольника.
#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;
}