Т. е. как я понимаю, есть некая точка 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;
}