Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как на графике найти расстояние от заданной точки до ближайшей к ней?То есть как найти эту ближайшую точку?

Katerina Katenok Ученик (218), закрыт 14 лет назад
Лучший ответ
Непростой Гусь Мастер (1480) 15 лет назад
Т. е. как я понимаю, есть некая точка A (координаты которой известны) и график некой ф-ии f(x).
Необходимо найти некоторую точку B на графике f(x), Чтобы расстояние между точками A и B было минимальным?

Есть 2 способа:

Вариант 1:
Если, в отличие от меня, дружите с математикой, то нужно найти минимум ф-ии l(x) = ( (x0 - x)^2 + (y0 - f(x))^2 )^0.5,
где x0, y0 - координаты точки A,
под знаком ^ я подразумеваю возведение в степень.

Как мог, корявенько нарисовал это все на бумажке (простите за снимок и за каракули) .



Производные можно расчитывать в математических программах, вроде Mathcad.

Вариант2:
Если у Вас хватило сил прочитать более 15 страниц любого учебника по программированию, то можно написать мега-сложную программу, которая будет пробегать по точкам графика ф-ии с определенным шагом, измерять расстояние от даной точки до точки A и среди получившихся значений искать минимум.

#include <iostream>
#include <math.h>
using namespace std;

double vX0 = 3;//Координаты точки A (от которой ищется ближайшая точка до графика)
double vY0 = 2;

double startX = 0;//Начало проверяемого диапазона
double endX = 10;//Конец проверяемого диапазона
double stepX = 0.01;//Шаг

//Именно это тестируемая функция
double myFunc(double x) {
return (cos(x) + x * x + 0.1986);
}

int main() {
double result = startX;
double sizeL = sqrt((vX0 - startX) * (vX0 - startX)
+ (vY0 - myFunc(startX)) * (vY0 - myFunc(startX)));
double tmp;

for (double x = startX + stepX; x <= endX; x += stepX) {
tmp = sqrt((vX0 - x) * (vX0 - x) + (vY0 - myFunc(x))
* (vY0 - myFunc(x)));
if (sizeL > tmp) {
sizeL = tmp;
result = x;
}
}

cout << "Наиболее близкая точка, имеющая координаты (" << result << ", "
<< myFunc(result) << "), расположена на расстоянии " << sizeL
<< endl;

return 0;
}

Остальные ответы
Ним Гуру (2751) 15 лет назад
если надо найти ближайшую, то можно проверять все точки от уже известной смещаясь вверх и в бок, как только смещение вверх дойдет до максимального предела.
Alexander K Гуру (3915) 15 лет назад
Воспользуйся циркулем. Он поможет поделить все точки на те, которые вне окружности, и на те, что внутри её. Постепенно уменьшая радиус, ты найдёшь самую близкую точку.
Удачи!
Голый Мужик Мыслитель (9631) 15 лет назад
Найти расстояния от заданной точки до каждой из остальных по Пифагору и найти минимальное из них - не логично ли?
Похожие вопросы