Условие
Принадлежит ли точка (х;у) фигуре на рисунке? Варианты 1-20. Пожалуйста повторите в своём отчёте рисунок, выполнив его в формате SVG.
Тесты
Входные данные (точка K) | Выходные данные |
(3;4) | no |
(1;1) | yes |
(1;4) | yes |
(3;0) | yes |
(0;6) | no |
(-13; -3) | no |
(-4.5; -3) | yes |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> #include <stdio.h> using namespace std; struct point { double x, y; }; double g(struct point a, struct point b, struct point k){ return (k.x - a.x) * (b.y - a.y) - (k.y - a.y) * (b.x - a.x); } // определяем местоположение точки K относительно прямой АВ bool f(struct point a, struct point b, struct point c, struct point k){ return g(a, b, c) * g(a, b, k) >= 0; } // определяем, лежит ли точка С в одной полуплоскости с точкой К int main() { struct point a { 1, 4 }, b { 5, -4 }, c { -5, -3 }; double x, y; struct point k { k.x, k.y }; cin >> k.x >> k.y; cout << ((f(a,b,c,k) && f(b,c,a,k) && f(c,a,b,k)) ? "yes" : "no"); return 0; } |
Для запроса на выполнение нажать здесь.
Решение
[latex](x — x_A)(y_B — y_A) — (y — y_A)(x_B — x_A) = 0[/latex] — уравнение прямой, проходящей через точки [latex]A[/latex] и [latex]B[/latex]. Тогда для любой точки [latex](x; y)[/latex] можно определить её местоположение относительно прямой [latex]AB[/latex]. Если левая часть неравенства будет равно 0, то точка лежит на прямой. Прямая [latex]AB[/latex] разбивает плоскость на две полуплоскости. Точки лежащие в одной полуплоскости будут давать положительные значения, а точки из другой полуплоскости — отрицательные. Тогда, объединением условий местоположения точки [latex](x; y)[/latex] и местоположения точек [latex]C, A, B[/latex] относительно прямых [latex]AB[/latex], [latex]BC[/latex], [latex]AC[/latex] соответственно, мы сможем определить местоположение данной точки относительно треугольника.По рисунку видно, что [latex]A(1;4), B(5, -4), C(-5, -3)[/latex]. Тогда, определяем положение точки [latex]K[/latex] относительно каждой прямой и точки не лежащей на данной прямой треугольника [latex]ABC[/latex].
Для отправки комментария необходимо войти на сайт.