Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 567
1

Точка окружности, ближайшая к данной точке

06.09.2019, 15:44. Показов 2755. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста

Найдите точку на 2D-окружности, которая является ближайшей к данной точке.

Входные данные:
Пять реалов :
1. координаты точки.
2. координаты центра круга.
3. радиус круга.
Расстояние между данной точкой и центром круга больше, чем 1e-8.
Выход:
Два реала: 2D координаты ближайшей точки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct Point2D {
    double x, y;
    double& operator[](int index) {
        if (index == 0)
            return x;
        else if (index == 1)
            return y;
        else _exception();
    }
};
int main() {
    Point2D vector;
    Point2D center;
       double radius;
    cin >> vector.x >> vector.y >> center.x >> center.y >> radius;
    
 
 
 
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2019, 15:44
Ответы с готовыми решениями:

Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в точке (a, b) и z = 0 в противном случае.
Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в...

Определите, принадлежит ли точка данной окружности
Нужно побыстрому задачу на С решить! Заранее спасибо! Окружность с центром в точке (x,y)...

ближайшая точка на кривой(или поверхности) к некоторой точке пространства
Дана поверхность, допустим f(x,y,z)=0 и произвольная точка пространства M(x,y,z) не лежащая на...

Какая точка симметрична данной точке относительно полюса?
3)Какая точка симметрична точке M(2; –π/4) относительно полюса?

13
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
06.09.2019, 16:10 2
Нарисуйте окружность и точку. Какая точка на окружности самая близкая к вашей точке? Заметьте, она лежит на прямой, соединяющей вашу точку с центром окружности.
Так что вам надо:
Уравнение окружности: (x-xc)^2+(y-yc)^2=R^2
Уравнение прямой по двум точкам: (y-yc)/(yp-yc) = (x-xc)/(xp-xc)
Здесь я обозначила: xc, yc - координаты центра окружности; xp,yp - координаты точки; R - радиус.
Решаем эту систему уравнений, находим x и y.
Обратите внимание, что прямая пересекает окружность в двух точках. Так что вы найдете две точки - ближнюю и дальнюю.
Выбираете ближнюю - это ваш ответ.
1
С чаем беда...
Эксперт CЭксперт С++
8657 / 4327 / 1191
Регистрация: 18.10.2014
Сообщений: 9,410
07.09.2019, 01:51 3
Цитата Сообщение от Крашеная Посмотреть сообщение
Уравнение окружности: (x-xc)^2+(y-yc)^2=R^2
Уравнение прямой по двум точкам: (y-yc)/(yp-yc) = (x-xc)/(xp-xc)
Здесь я обозначила: xc, yc - координаты центра окружности; xp,yp - координаты точки; R - радиус.
Решаем эту систему уравнений, находим x и y.
После того, как вы поняли, где будет лежать ближайшая точка, уравнение окружности вам уже совершенно ни к чему и, соответственно, никакую "систему уравнений" тут решать не нужно.

Вам дана точка O - центр окружности, точка T - исходная точка и радиус R. Все, что вам нужно сделать - это отложить на прямой OT отрезок длины R, начиная от точки О по направлению к точке Т. Второй конец этого отрезка - это ответ задачи.

Пусть K равно отношению R к длине OT

https://www.cyberforum.ru/cgi-bin/latex.cgi?{\Delta }_{x} = {x}_{T} - {x}_{O}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{\Delta }_{y} = {y}_{T} - {y}_{O}

https://www.cyberforum.ru/cgi-bin/latex.cgi?K = \frac{R}{\sqrt{{{\Delta }_{x}}^{2} + {{\Delta }_{y}}^{2}}}

Тогда ответ задачи

https://www.cyberforum.ru/cgi-bin/latex.cgi?x = {x}_{O} + {\Delta }_{x} * K
https://www.cyberforum.ru/cgi-bin/latex.cgi?y = {y}_{O} + {\Delta }_{y} * K

Разумеется, все это имеет смысл только если точки O и T различны.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 567
07.09.2019, 01:57  [ТС] 4
TheCalligrapher, второй конец - это точка, лежащая на круге ?
дельта х - это разница координат х центра О и точки Т?
0
С чаем беда...
Эксперт CЭксперт С++
8657 / 4327 / 1191
Регистрация: 18.10.2014
Сообщений: 9,410
07.09.2019, 02:02 5
Цитата Сообщение от ElKros Посмотреть сообщение
второй конец - это точка, лежащая на круге ?
На окружности. Да, эта точка окажется лежащей на окружности.

Цитата Сообщение от ElKros Посмотреть сообщение
дельта х - это разница координат х центра О и точки Т?
Да, как написано.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 567
07.09.2019, 02:07  [ТС] 6
TheCalligrapher, спасибо ) надеюсь, все получится )
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
08.09.2019, 01:38 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
После того, как вы поняли, где будет лежать ближайшая точка, уравнение окружности вам уже совершенно ни к чему и, соответственно, никакую "систему уравнений" тут решать не нужно.
Протупила. И правда можно проще. Результат, конечно же будет тот же, но так проще, вы правы
0
Комп_Оратор)
Эксперт по математике/физике
8677 / 4393 / 596
Регистрация: 04.12.2011
Сообщений: 13,145
Записей в блоге: 16
08.09.2019, 09:58 8
Цитата Сообщение от Крашеная Посмотреть сообщение
Протупила. И правда можно проще.
Крашеная, вы описали общее решение. Вообще, термин "ближайшая" связан с поиском расстояния. Для точки и кривой это перпендикуляр из точки на кривую. Для выпуклой и замкнутой кривой для заданной точки их, минимум 2 штуки. Для окружности задача упрощается нахождением расстояния от точки до центра. Для случаев когда оно равно нулю и бесконечности получается одинаковый результат - нет решения задачи. Греки считали окружность и ноль божественными проявлениями великого начала. Ничто, которое содержит всё. Фактически, никогда не бывает бесконечно далеко, так же как и невозможно достичь абсолютного нуля (отсутствия) чего-либо. Философская задачка, если захотеть. И обобщающий взгляд вполне соответствует предмету.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 567
09.09.2019, 00:22  [ТС] 9
TheCalligrapher, а, если будут не разными ?

Добавлено через 10 минут
Крашеная, если решать систему, то методом Ньютона или хорд?

Добавлено через 2 минуты
IGPIGP, подскажите пожалуйста, написала решение по методу , который предложил TheCalligrapher. Но не всегда выводит правильный результат. подскажите пожалуйста, что можно изменить ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
using namespace std;
 
struct Point2D {
    double x, y;
    double& operator[](int index) {
        if (index == 0)
            return x;
        else if (index == 1)
            return y;
        else _exception();
    }
};
int main() {
    Point2D vector;
    Point2D center;
    double radius;
    Point2D result;
    cin >> vector.x >> vector.y >> center.x >> center.y >> radius;
    double delta_x = vector.x - center.x;
    double delta_y = vector.y - center.y;
    double k = radius / (sqrt(pow(delta_x, 2) + pow(delta_y, 2)));
    result.x = center.x + delta_x * k;
    result.y = center.y + delta_y * k;
    printf("%.1f %.1f", result.x, result.y);
    return 0;
}
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
09.09.2019, 00:39 10
Цитата Сообщение от ElKros Посмотреть сообщение
если решать систему, то методом Ньютона или хорд?
аналитически! ручкой на бумажке. Но не надо - TheCalligrapher прав.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 567
09.09.2019, 00:46  [ТС] 11
Крашеная, не всегла выводит верный результат.. И что делать, если не разные точки ?
0
С чаем беда...
Эксперт CЭксперт С++
8657 / 4327 / 1191
Регистрация: 18.10.2014
Сообщений: 9,410
09.09.2019, 02:01 12
Цитата Сообщение от ElKros Посмотреть сообщение
TheCalligrapher, а, если будут не разными ?
Если точка попадает в центр, то это уже у вас нужно спрашивать, какой должен быть ответ в таком случае? "Нет ближайшей точки"? Или наоборот, "все точки окружности являются ближайшими"?

Ситуация-то элементарно отлавливается, вопрос только в том, какой ответ вывести.

Цитата Сообщение от ElKros Посмотреть сообщение
Но не всегда выводит правильный результат.
Байки про "не всегда выводит правильный результат" тут никому не интересны. Где пример входа и "неправильного результата"? Почему вы его не привели?
0
2876 / 1726 / 353
Регистрация: 09.09.2017
Сообщений: 7,276
09.09.2019, 10:14 13
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Байки про "не всегда выводит правильный результат" тут никому не интересны. Где пример входа и "неправильного результата"? Почему вы его не привели?
...и почему считаете его неверным. А то вдруг это вы считать не умеете, а не машина. (вообще-то довольно частая ситуация)
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
09.09.2019, 11:45 14
ElKros, В вашем коде строчку 23 разбейте. Сейчас у вас если точка и центр окружности совпадают, то знаменатель будет равен нулю. Прежде чем присваивать radius / (sqrt(pow(delta_x, 2) + pow(delta_y, 2))) к k, надо сначала проверить, не совпадают ли точки (не равен ли нулю знаменатель), если да, то :
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Нет ближайшей точки"? Или наоборот, "все точки окружности являются ближайшими"
, а если не совпадают, то уже присваивать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2019, 11:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Какая точка симметрична данной точке относительно полярной оси?
1)Какая точка симметрична точке M1(2; π/4) относительно полярной оси?

Дана точка М(Х,У). Присвоить Z=1 если т. принадлежит окружности с радиусом Р и центром в точке (а,б)
Составьте блок-схему пользуясь условным оператором или оператором выбора. Дана точка М(Х,У)....

Ближайшая точка к курсору
Все привет......известен центр и радиус, как узнать ближайшую точку к курсору в это радиусе?

Ближайшая точка в трехмерном пространстве
Добрый день, помогите, пожалуйста, написать программу на Haskell для выбора из 2х точек заданных в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.