Войти
Регистрация
Спроси ai-bota
В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
Показать больше
Показать меньше
shukrona2006221
14.01.2023 15:08 •
Информатика
написать программу (на Паскале)которая определяет лежит ли точка а внутри треугольной области 2x+y=4 (внутри понимается в строгом смысле, то есть случай, когда А лежит на границе области-недопустим
Показать ответ
Ответ:
25.10.2020 15:57
Код#include <iostream>#include <cmath>#include <exception>class Point;class Figure;class Circle;class Rectangle;class UnitedFigure;class ComplementedFigure;class IntersectedFigure;template <typename T>int sign(T number) { if (number > 0) return 1; if (number == 0) return 0; return -1;}class Point {public: double x; double y; Point() = default; Point(double x, double y) : x(x), y(y) {} Point operator + (const Point& p) const { return Point {x + p.x, y + p.y}; } Point operator - (const Point& p) const { return Point {x - p.x, y - p.y}; } double operator * (const Point& p) const { return Point::dot(*this, p); } Point operator * (double k) const { return Point { k * x, k * y }; } static Point max (const Point& p1, const Point& p2) { return Point {std::max(p1.x, p2.x), std::max(p1.y, p2.y)}; } static Point min (const Point& p1, const Point& p2) { return Point {std::min(p1.x, p2.x), std::min(p1.y, p2.y)}; } static double dot (const Point& p1, const Point& p2) { return p1.x * p2.x + p1.y + p2.y; } template<typename T> static T clamp (const T& p, const T& min, const T& max) { if (p >= min and p <= max) { return p; } if (p < min) { return min; } if (p > max) { return max; } throw std::runtime_error("How have you could take this like??"); } double vec_length () const { return sqrt(x*x + y*y); }};class Figure {public: [[nodiscard]] virtual double distance_to (const Point &p) const = 0; friend UnitedFigure operator + (const Figure & f1, const Figure & f2); friend ComplementedFigure operator - (const Figure & f1, const Figure & f2); friend IntersectedFigure operator & (const Figure & f1, const Figure & f2); bool is_point_into(const Point &p) const { return distance_to(p) <= 0; } bool is_point_strict_into(const Point &p) const { return distance_to(p) < 0; }};class Circle : public Figure { Point o; double r;public: Circle (Point p, double r) : o(p), r(r) {} [[nodiscard]] double distance_to (const Point &p) const override { return (o - p).vec_length() - r; }};class Rectangle : public Figure { Point a; Point b;public: Rectangle (Point p1, Point p2) : a(Point::min(p1, p2)), b(Point::max(p1, p2)) {} [[nodiscard]] double distance_to (const Point &p) const override { auto d = Point::max(a - p, p - b); return Point::max(d, Point {0, 0}).vec_length() + std::min(0.0, std::max(d.x, d.y)); }};class Triangle : public Figure { Point a; Point b; Point c;public: Triangle(const Point &a, const Point &b, const Point &c) : a(a), b(b), c(c) { } [[nodiscard]] double distance_to(const Point &p) const override { auto p0 = a, p1 = b, p2 = c; auto e0 = p1 - p0; auto e1 = p2 - p1; auto e2 = p0 - p2; auto v0 = p - p0; auto v1 = p - p1; auto v2 = p - p2; auto pq0 = v0 - e0*Point::clamp( Point::dot(v0,e0)/Point::dot(e0,e0), 0.0, 1.0 ); auto pq1 = v1 - e1*Point::clamp( Point::dot(v1,e1)/Point::dot(e1,e1), 0.0, 1.0 ); auto pq2 = v2 - e2*Point::clamp( Point::dot(v2,e2)/Point::dot(e2,e2), 0.0, 1.0 ); double s = sign( e0.x * e2.y - e0.y * e2.x ); auto d = Point::min(Point::min( Point {Point::dot(pq0,pq0), s*(v0.x*e0.y-v0.y*e0.x)}, Point {Point::dot(pq1,pq1), s*(v1.x*e1.y-v1.y*e1.x)}), Point {Point::dot(pq2,pq2), s*(v2.x*e2.y-v2.y*e2.x)}); auto r = -sqrt(-d.x)*sign(d.y); // debug this later return r; }};class UnitedFigure : public Figure { const Figure &f1; const Figure &f2;public: UnitedFigure (const Figure &_f1, const Figure &_f2) : f1(_f1), f2(_f2) {} [[nodiscard]] double distance_to(const Point &p) const override { return std::min(f1.distance_to(p), f2.distance_to(p)); }};class ComplementedFigure : public Figure { const Figure &f1; const Figure &f2;public: ComplementedFigure (const Figure &_f1, const Figure &_f2) : f1(_f1), f2(_f2) {} [[nodiscard]] double distance_to(const Point &p) const override { return std::max(f1.distance_to(p), -f2.distance_to(p)); }};class IntersectedFigure : public Figure { const Figure &f1; const Figure &f2;public: IntersectedFigure (const Figure &_f1, const Figure &_f2) : f1(_f1), f2(_f2) {} [[nodiscard]] double distance_to(const Point &p) const override { return std::max(f1.distance_to(p), f2.distance_to(p)); }};UnitedFigure operator + (const Figure & f1, const Figure & f2) { return UnitedFigure{f1, f2};}ComplementedFigure operator - (const Figure & f1, const Figure & f2) { return ComplementedFigure{f1, f2};}IntersectedFigure operator & (const Figure & f1, const Figure & f2) { return IntersectedFigure{f1, f2};}int main() { Point A {}; std::cin >> A.x >> A.y; Triangle figure(Point{0, 0}, Point{2, 0}, Point{0, 4}); std::cout << (figure.is_point_strict_into(A) ? "Yes" : "No") << std::endl; return 0;}
0,0
(0 оценок)
Популярные вопросы: Информатика
Виктория20052808
02.01.2020 08:03
Дан список из нескольких сотрудниц, в котором указаны оклады каждой и количество детей. для женщин, имеющих 1 или 2-х детей, надбавка не выплачивается. за третьего...
bodik228
29.03.2023 14:00
Как в паскале graphabc нарисовать точку...
Ксения1802
25.06.2022 10:01
1) у масиві в [1..7] замініть всі від ємні елементи останнім. 2) у масиві с [1..к] визначне суму елементів з проміжку [х1; х2] на 1) в массиве в [1..7] замените...
arelbeis
13.03.2021 00:10
Напишите программу для кузнечика, выполнив которую он перекрасит все точки от 1 до 100. используйте команду нц раз кц...
ЯЛюблюЛето
22.12.2021 05:05
Определить тип вычислительного процесса a = 20; b = 10; d = 0; если a b то c = b – a иначе c = 3 × (a – b), d = d + 10. напечатать значения c, d:...
margo2606
14.10.2022 06:20
Раздели циферблат часов прямыми на шесть частей так,чтобы в кажой из них было по два числа и их суммы были равными....
GNA14
14.10.2022 06:20
Миша живет в 22-этажном доме. в нем есть лифт, в котором работают только 2 кнопки. при нажатии на одну из них лифт опускается на 5 этажей, а при нажатие на другую...
Getara907
14.10.2022 06:20
Сдано , что найти и т.д.сколько битов памяти достаточно для кодирования одного пикселя 16- цветного изображения?...
yanastepina83
23.10.2020 15:22
Как выделить предложения с сочетанием клавиш....
vitalii1962svet
19.03.2023 12:39
Запишите пошагово алгоритм . в бочке имеется вода. как набрать 6 литров воды при 9-литрового и 5-литрового ?...
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку
О НАС
О нас
Блог
Карьера
Условия пользования
Авторское право
Политика конфиденциальности
Политика использования файлов cookie
Предпочтения cookie-файлов
СООБЩЕСТВО
Сообщество
Для школ
Родителям
Кодекс чести
Правила сообщества
Insights
Стань помощником
ПОМОЩЬ
Зарегистрируйся
Центр помощи
Центр безопасности
Договор о конфиденциальности полученной информации
App
Начни делиться знаниями
Вход
Регистрация
Что ты хочешь узнать?
Спроси ai-бота