Условие
Принадлежит ли точка [latex] \left( x,y \right) [/latex] фигуре на рисунке?
Входные данные
Координаты точки [latex]\left(x,y\right)[/latex] на плоскости.
Выходные данные
Если точка принадлежит фигуре, вывести «Принадлежит» (без кавычек), в противном случае — «Не принадлежит».
Задача взята отсюда.
Тесты
№ | x | y | Вывод |
1 | 1 | -1 | Принадлежит |
2 | 0 | 0 | Принадлежит |
3 | 0 | 4 | Принадлежит |
4 | 5 | 0 | Принадлежит |
5 | 0 | 4.00001 | Не принадлежит |
6 | -3 | 5 | Не принадлежит |
7 | 2 | 3 | Принадлежит |
Решение
Фигура в задаче представлена в виде двух четвертей окружностей, лежащих в I и IV четвертях с радиусами [latex] R1 [/latex] и [latex] R2 [/latex] , которые равны соответственно [latex] 4 [/latex] и [latex] 5 [/latex]. Центры окружностей находятся в начале координатных осей. Сразу после ввода координат точки выполняем проверку принадлежности фигуре, а именно: координата [latex]X\ge0[/latex] ? В случае отрицательного ответа программа выведет сообщение «Не принадлежит». Одновременно со знаком [latex]X[/latex] выполняется проверка с помощью формулы, полученной из уравнения окружности: [latex]{\left(x-{X}_{c}\right)}^{2}+{\left(y-{Y}_{c}\right)}^{2}\le{R}^{2}[/latex], где [latex]X_{c}[/latex] и [latex]Y_{c}[/latex] — координаты центра окружности. Если координаты точки проходят данную проверку для соответствующего радиуса, который зависит от знака [latex]Y[/latex], то точка принадлежит фигуре, в противном случае выведется сообщение «Не принадлежит».
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; int main(){ double y,Yc,x,Xc,R1,R2; Xc = 0; // координаты центров окружностей Yc = 0; R1 = 4; R2 = 5; cin >> x >> y; cout << ((x >= 0 && ((y > 0 && ((y - Yc)*(y - Yc) + (x - Xc)*(x - Xc)) <= R1*R1) || (y <= 0 && ((y - Yc)*(y - Yc) + (x - Xc)*(x - Xc)) <= R2*R2)))? "Принадлежит" : "Не принадлежит"); return 0; } |
Код на сайте ideone.com находится здесь.
— Не нужно два раза писать один и тот же код про «не принадлежит» 3 раза и 2 раза про «принадлежит». Нужно сформулировать одно условие в одном условном операторе с помощью логических операций «и» и «или».
— Я бы сказал «поправьте отступы», но этот код Вам не понадобится.
— По SVG. Вам нужно было написать код двух окружностей и одного прямоугольника (или модифицировать path, что короче, но не понятнее). Как Вам удалось вычислить, что радиус именно 79.999992? И прямоугольник у Вас начинается в x=»0.416812″ y=»-0.875109″. И координаты из образца Вы подкорректировали. Например вместо 20 поставили 19.791502, а вместо 320 сделали 319.750004. Я конечно не готов спорить, может так даже лучше. Но объясните, что Вы имели в виду? Вы же не запустили графический редактор, который там всё «тупо закосячил»?
Сформулировал всё в одном условии с помощью логических «и» и «или».
Отступы поправил в коде. Так как условие довольно громоздкое, для удобства чтения использовал две строки.
SVG исправил.
Игорь Евгеньевич! Сегодня у меня целый день проблема с работой ideone. На одних и тех же тестах подряд выдаёт различные результаты. Также были неправильные результаты при использовании координат с большими значениями. Иногда (но не всегда) спасало обновление страницы. Подскажите, пожалуйста, это ошибка в моём коде или же проблема вышеупомянутого ресурса?