Задача. Принадлежит ли точка [latex](x;y)[/latex] фигуре на рисунке?
Тесты:
№ | Ввод [latex](x,y)[/latex] | Вывод |
1 | 3 1 | YES |
2 | -3 1 | NO |
3 | -3 -1 | NO |
4 | 3 -1 | YES |
5 | 4 7 | NO |
6 | 4 -7 | NO |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <math.h> using namespace std; int main() { double x, y, l; // x,y - координаты точки; l - расстояние от центра круга до точки double x1 = 0, y1 = 0, r = 6; // x1,y1 - центр круга; r - радиус double xz = 2; // начало сегмента круга cin >> x >> y; l = (x-x1)*(x-x1)+(y-y1)*(y-y1); if(x >= xz && r*r >= l) cout << "YES"; // область допустимых значений x else cout << "NO"; return 0; } |
Решение:
Изучив рисунок, находим координаты трех точек сегмента круга. После, находим координаты центра круга и его радиус с помощью данного сайта. Если проекция точки на ось [latex]OX[/latex] не находиться в области допустимых значений [latex]x[/latex], то точка не принадлежит сегменту круга в любом случае. Если же первое условие выполняется, то точка принадлежит сегменту круга тогда, когда квадрат расстояния ([latex]l[/latex]) от центра круга до точки меньше либо равно квадрату радиуса ([latex]r[/latex]) круга ([latex]r*r[/latex] >= [latex]l[/latex])
Условие задачи здесь.
Ссылка на решение задачи на компиляторе ideone.com здесь.
— Рисунок не в SVG, не мошенничайте. Если бы Вы всё делали честно, то знали, что центр окружности имеет координаты (0:0), а радиус равен 6.
— Для возведения числа в квадрат его умножают само на себя а не используют разложение в ряд Тейлора.
— «Mif17.11» не ключевое слово, а произвольно выбранный мной идентификатор задачи.
— Вас не смущают все эти < в коде Вашей программы?
— «Компилятор здесь» — сформулируйте точнее.
— Я протестировал для точки (2.01: 5.01). Почему ответ NO? Она же явно зелёная с хорошим запасом.
Спасибо. Ошибся с рисунком.
— Хорошая идея заслонить «ненужную» часть окружности прямоугольником. Молодец. Вот только реализация хромает. Заслоняющий прямоугольник слева вылезает за фон, снизу не закрывает окружность полностью. а по цвету он не совпадает с фоном. У нас же есть прямоугольник фона — просто скопируйте эту строчку вместе с заданием цвета. Только размеры подгоните.
— Выделите запятыми деепричастные обороты. Поскольку это характерная для Вас ошибка, советую заглянуть сюда.
— Объедините условия из обоих условных операторов в одно при помощи &&.
— Для текста (х;у) лучше использовать latex: [latex]\left( x; y \right)[/latex].
Думал, что рисунок не обязательно делать детально. Но все же нужно делать правильно. И остальное исправил.
Фигура ограничена двумя линиями — вертикальной прямой x = 2 и окружностью с центром в начале координат радиуса 6. Эти два условия и нужно проверить. Остальное излишества. Заодно уберите переменные, которые не используются.
Условия выполнил. Переменные убрал.
Осталось только избавиться от извлечения корня. Зачем нам такая трудоёмкая операция для такой простой задачи?
Я даже не задумывался о таком. Спасибо, так код выглядит проще.
Не в этом дело. Функция вычисления корня использует итерационный алгоритм по соти эквивалентный разложению в ряд. Лучше без необходимости этого не делать.
Зачтено.