我的任务是使用带有 opengl 的c ++创建抛物面和椭圆体。
我实施抛物面作为一组点,距离焦点的距离和距离平面的距离是相同的。运行编译器后,我得到了一个看起来像椭圆体的东西。
错误在于我不小心在距离焦点的距离处放置了乘数(大约为1.1)。
所以我得到了等式|Q-F|*1.1=|Q-P|
,其中Q
是要确定椭圆/抛物面的一部分,F
是焦点的点,P
是从中投射的点F
到飞机(P->F
向量是这种方式的飞机的正常向量)。
在将等式修正为|Q-F|=|Q-P|
之后,我得到了抛物面,如预期的那样。当我将等式改为(|Q-F|*m=|Q-P| ,m>1)
时,我得到了一个椭圆体。
这个等式真的是椭圆体吗?
答案 0 :(得分:0)
考虑2D情况就足够了(因为抛物面和椭圆体可以通过旋转形成) 设点中的点的距离为L到OY轴,距离为R到F点,距离比为系数m:
L * m = R
我们m^2 = k
k * L^2 = R^2
k * X^2 = Y^2 + (X - F)^2
X^2 * (k-1) + 2 * X * F - F^2 = Y^2
当k = 1时
Y^2 = 2* F * (X - F/2)
这是抛物线的规范等式,偏移了F / 2
k > 1, k-1 = p > 0
时,
X^2 + 2 * X * F / p - Y^2 / p = F^2 / p
这是双曲线
k < 1, 1 - k = p > 0
时,
-p * X^2 - 2 * X * F + Y^2 + F^2 = 0
(X - F/P)^2 + Y^2/p = F^2/p^2*(1-p)
如果我的计算中没有错误,那么这是椭圆形,以Xc = F/p
为中心,带有半轴F*Sqrt(1-p)/p
和F * Sqrt((1-p)/p)