0

我正在学习 Unity3d + 一些我因乱搞而忘记的基本数学。
这是我现在在做什么..

正如你可能知道的那样,这个形状的侧面形成了一条抛物线。它们与中心的距离是基本半径 + 高度的平方 * 乘以常数(在此图像中为 0.05)

生成这个的代码非常简单..

for (int changer = 1; changer > -2; changer-=2) {

        Vector3 newPos = new Vector3(
             transform.position.x
            ,transform.position.y + currentheight*changer
            ,transform.position.z - RadiusAtZero -(Mathf.Pow(currentheight,2)*CurveMultiplier)
            );

        var newFleck = Instantiate(Fleck, newPos, Quaternion.identity)as GameObject;
        newFleck.transform.RotateAround(transform.position,Vector3.up,angle*changer);

        FleckList.Add(newFleck );

        }

顺便说一句,for循环和'changer'反映了一切,所以'currentheight'实际上只是到抛物线中心线的距离。

无论如何,我想让立方体(或我称之为斑点的斑点)有角度,以便它们与我制作的抛物线相切。
我需要确定在特定点与抛物线相切的角度。
我发现了这个

要找到在 (1, -2) 处与 y=x^2 -3 相切的线,我们可以同时求解 y=x^2 -3 和 y+2=m(x-1) 并将判别式设置为零

但我不知道如何实现这一点。此外,我认为我的“CurveMultiplier”常数使我的抛物线方程与那个不同。
有人可以编写一些确定角度的代码吗?(也可以解释一下)

更新。这是使用方程的导数的固定版本。(我也从盒子变成了四面体和其他一些肤浅的东西) 在此处输入图像描述

4

1 回答 1

2

最简单的解决方案是使用抛物线方程的导数。

在您的图片中,我将假设 Y 是垂直的,X 是水平的,并且 Z 是在屏幕上/在屏幕外。然后根据您的描述旋转的抛物线是:

f(h) = 0.05*h^2 + R

h是高度,R是底半径)。如果你想象一个包含 Y 轴的平面,你可以将平面绕 Y 轴旋转任意角度,双抛物线看起来是一样的。

形式的抛物方程的导数f(x) = C*h^2 + Rf'(x) = 2*C*h,它是 处切线的斜率h。在这种特定情况下,这将是:

f'(h) = 0.1*h

由于横截面相对于 X 轴和 Z 轴具有一个角度,因此该切线也将具有相同的角度分量(您有一个旋转的抛物线)。

根据为 中的常数给出的单位f(h),尤其是0.05值,您可能需要调整它以获得正确的结果。

于 2013-10-15T03:14:44.693 回答