其他分享
首页 > 其他分享> > CodeGo.net>如何在代码中找到点和抛物线之间的距离

CodeGo.net>如何在代码中找到点和抛物线之间的距离

作者:互联网

我试图为DirectX像素着色器找到抛物线上最接近2d中任意点的点.

大量的Google搜索向我揭示这是一个常见的微积分前作业问题.不幸的是,成百上千的相关答案都说“一旦有了这个方程式,就使用图形计算器的最小函数,它将告诉您答案是6”.

我承认我没有回想预演算.我认识到,我寻求的方程式可能就在Wikipedia上,但我不知道如何将这些希腊符号转换为HLSL函数.使用C,C,C#或任何其他语言的解决方案也将不胜感激.

编辑:根据要求查看输入曲线的格式:

//Equation of parabola being y = ax^2 + bx + c
//p is the arbitrary point we're trying to find the closest point on the parabola for.
float2 GetClosestPointOnParabola(float a, float b, float c, float2 p)
{
    //Something involving the distance formula...
    //Something involving "minimization"...
    return float2(x, y);
} 

解决方法:

您可以利用此:

Pmin = (xmin, ymin) ~ point on a parabola
P = (px, py) ~ point in 2d    
y = a*x^2 + bx + c ~ parabola

P(x) = (x-px)^2 + (y-py)^2 = (x-px)^2 + (a*x^2 + bx + c - py)^2

您需要计算P(x)的导数,这并不困难.例如.
如果得到:P(x)= x ^ 4 4x ^ 2-3x 10,则导数为:

P'(x) = 4x^3 + 8x - 3

我认为您会知道如何计算.然后将P'(x)与零进行比较,以找到与X轴交叉的位置.您从中找到一个xmin,然后从中得到ymin:

y = a*x^2 + bx + c

而已.

标签:calculus,hlsl,c,c-4,math
来源: https://codeday.me/bug/20191201/2081889.html