Назад Зміст Вперед

Задачі на перевірку потрапляння точки в заштриховану область

Приклад 1

Визначення належності точки колу з центром у початку координат

Будемо вважати, що точка належить колу, якщо знаходиться всередині нього або на його колі.

Із будь-якої точки координатної площини можна провести відрізок до початку координат. Якщо довжина цього відрізка більша за радіус кола, то точка лежить за межами кола і, відповідно, не належить йому. Якщо ж відрізок, що з’єднує точку і початок координат, менший за радіус кола або дорівнює йому, то точка буде належати колу.

Відрізок між будь-якою точкою і нульовою точкою (початком координат) є гіпотенузою прямокутного трикутника, катети якого дорівнюють значенням x і y координати цієї точки.

Таким чином, задача зводиться до двох дій:

  1. Знаходження довжини відрізка між точкою і початком координат за теоремою Піфагора (квадрат довжини гіпотенузи дорівнює сумі квадратів довжин катетів).
  2. Порівняння отриманого значення з радіусом кола.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float x, y, R, g;
    setlocale(0, "");
    cout << "Введіть координати точки (x,y):" << endl;
    cin >> x >> y;
    cout << "Введіть радіус кола R:" << endl;
    cin >> R;
    g = sqrt(x * x + y * y);
    cout << "Точка лежить на відстані " << g << " від центра" << endl;
    if (g < R)
        cout << "Точка з координатами:" << x << " і " << y << " належить колу радіуса " << R << endl;
    else
        cout << "Точка з координатами:" << x << " і " << y << " не належить колу радіуса " << R << endl;
    return 0;
}

Результат роботи програми перевірки точки на колі

Введіть координати точки (x,y):
10
10
Введіть радіус кола R:
20
Точка лежить на відстані 14.1421 від центра
Точка з координатами:10 і 10 належить колу радіуса 20

...Програма завершена з кодом виходу 0

Пояснення результату:

Програма отримала координати точки (10, 10) і радіус кола 20.

Відстань від початку координат до точки розраховується за формулою: √(x² + y²) = √(10² + 10²) = √200 ≈ 14.1421

Оскільки 14.1421 < 20, точка знаходиться всередині кола.

Приклад 2

#include <iostream>

using namespace std;

int main()
{
    float x,y;
    setlocale(0,""); 
    cout << "Введіть координати точки (x,y):";
    cin >> x >> y; 
    cout << fixed; cout.precision(2); 
    if(x < 2 && y < x && x*x + y*y > 4) 
        cout << "Точка з координатами:" << x << " і " << y << " належить заданій області." << endl; 
    else 
        cout << "Точка з координатами:" << x << " і " << y << " не належить заданій області." << endl; 
    return 0; 
}

Приклад 3

#include <iostream>

using namespace std;

int main()
{
    float x, y;
    setlocale(0, "");
    cout << "Введіть координати точки (x,y): ";
    cin >> x >> y;
    cout << fixed;
    cout.precision(2);
    
    if ((y < 2 - x * x && y > x && x < 0) || (y < 2 - x * x && y > 0 && x >= 0))
        cout << "Точка з координатами: " << x << " і " << y << " належить заданій області." << endl;
    else
        cout << "Точка з координатами: " << x << " і " << y << " не належить заданій області." << endl;
    
    return 0;
}

Розробка алгоритму розв’язання.

Першим кроком алгоритму має бути введення координат точки: x і y. Для більшої зручності під час аналізу результатів можна вивести введені значення на екран.

Дослідження зображення на рисунку-завданні дає підстави стверджувати, що цільова область утворюється перетином: прямої з коефіцієнтом -1 і зміщенням +1 та кола з центром у початку координат і радіусом 1, як показано на рисунку праворуч.

Рівняння цієї прямої: y=-x+1 Рівняння кола: x2+y2=1

Для перевірки потрапляння точки у задану область потрібно перевірити умови того, що:

  1. Точка лежить вище прямої або на ній, тобто: y>=-x+1
  2. Точка лежить всередині кола або на ньому, тобто: x2+y2<=1

Точка лежить в області, якщо виконуються обидві умови, якщо ж не виконується хоча б одна з них, точка лежить поза областю. Отже, ці умови повинні бути об’єднані логічною операцією "І".

Схема алгоритму наведена на рисунку нижче.

Визначення змінних програми

Для реалізації алгоритму нам потрібні лише змінні для зберігання значень координат x і y. В умовах завдання не наведені вимоги до точності обчислень, рисунок подано з досить невисокою точністю, тому для цих змінних було б достатньо типу float. Але відповідно до загального стилю програмування мовою C оберемо для них тип double.

Розробка тексту програми

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float x,y;
    setlocale(0,"");
    cout<<"Введіть координати точки (x,y):";
    cin>>x>>y;
    cout<<fixed;cout.precision(2);

    if(pow(x,2)+pow(y,2)<=1 and y>=1-x)
    {
        cout<<"Точка з координатами:"<<x<<" і "<<y<<" належить заданій області."<<endl;
    }
    else
    {
        cout<<"Точка з координатами:"<<x<<" і "<<y<<" не належить заданій області."<<endl;
    }
    return 0;
}

Відлагодження програми

Найважливіше у відлагодженні цієї програми — переконатися, що вона видає правильні результати при різних комбінаціях вхідних даних. Отже, необхідно підібрати такі комбінації, які були б показовими для різних випадків розміщення точки. Ми пропонуємо такі комбінації:

  1. точка лежить нижче області — (0.4, 0.4);
  2. точка лежить на нижній межі області — (0.5, 0.5);
  3. точка лежить всередині області — (0.7, 0.6);
  4. точка лежить на верхній межі області — (0.707, 0.707);
  5. точка лежить вище області — (0.8, 0.8);
  6. точка лежить на правому краї області — (1.0, 0.0);
  7. точка лежить на лівому краї області — (0.0, 1.0);

    Результати роботи програми

    Завдання для виконання

    Побудувати програму, яка вводить координати точки (x, y) і визначає, чи потрапляє точка у заштриховану область на рисунку, який відповідає вашому варіанту. Потрапляння на межу області вважати потраплянням у область.

    1)2)3)
    4)5)6)
    7)8)9)
    10)11)12)
    13)14)15)
    16)17)18)

    Назад Зміст Вперед