C/C++

Принадлежность точек к координатам

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

#include <iostream>
using namespace std;
struct Point {
double x;
double y;
Point() : x(0), y(0) {}
double length(const Point& p)const {
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
class Ring {
public:
Ring() : out_(0), in_(0) {}
Ring(double out, double in) : out_(out), in_(in) {}
bool contains(const Point& p) {
Point c;
auto len = p.length(c);
return len <= out_ && len >= in_;
}
private:
double out_;
double in_;
};
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
return value;
}
int main() {
system("chcp 1251 > nul");
auto out = real("Внешний радиус кольца: ");
auto in = real("Внутренний радиус кольца: ");
Ring ring(out, in);
Point point;
point.x = real("x: ");
point.y = real("y: ");
puts(ring.contains(point) ? "Принадлежит" : "Не принадлежит");
system("pause > nul");
}
Дима Болотов
Дима Болотов
55 297
Лучший ответ
Задавай какие-нибудь более конкретные вопросы, что ли? Тут все настолько элементарно, что даже непонятно, что именно человеку с более чем одной извилиной здесь может быть непонятно.
Oleg Gud
Oleg Gud
69 084
  Dikkey, МАТЕМАТИЧЕСКАЯ МОДЕЛЬ ЗАДАЧИ — просто описание задачи по правилам математики. Можно описать задачу словами.

  В математическую модель следует включить принцип решения задачи.

  Условие: множество точек задано двумя кругами с центрами в начале координат и радиусами r1 и r2, причём r1 ≤ r2. Во множество входят точки принадлежащие большему кругу, но не принадлежащие меньшему кругу (обе границы принадлежат множеству). Дана точка с координатами (x, y). Определить, принадлежит ли точка заданному множеству.

  Принцип решения: точка принадлежит заданному множеству, если длина радиус-вектора точки принадлежит числовому множеству [ r1, r2 ], в остальных случаях точка не принадлежит множеству. То же двойным неравенством: r1 ≤ r(x,y) ≤ r2. Длина радиус-вектора точки определяется как квадратный корень из суммы квадратов координат точки: r(x,y) = √(x²+y²).

  Примечание: для уменьшения погрешности вычисления рекомендуется сравнивать квадраты величин, что исключает необходимость вычисления корня: r1² ≤ x²+y² ≤ r2².



  Алгоритм составляется на основе математической модели. Например, так:
    1. Ввод r1, r2, x, y.
    2. Вычисление величин r1², r2², x²+y².
    3. Сравнение величин.
    4. Вывод результата сравнения.
Михаил Ельцов
Михаил Ельцов
16 172
если x >= r1 && x <= r2 && y >= r1 && y <= y2 = YES
Михаил Ельцов … только координаты следует брать по модулю!
Михаил Ельцов   …   однако, кольцо получается квадратным… У!!