找出一个给定中心,半径和方向vector的椭圆上的点?

我有一个vector(白线),一个椭圆(绿线)的半长轴和半短轴的中心和半径。 我需要find白线与绿色相交的地方。

我试图用Atan2SinCos来解决这个问题,但是这并不奏效(蓝线)。 它在平行于一个轴的情况下工作,但没有其他方式,我有一种感觉,这是因为我正在尝试在水平和垂直半径不同的椭圆上进行计算。

 Vector2 delta = (screenPos - canvasCentre).normalized; float angle = Mathf.Atan2(delta.y, delta.x); Vector2 position = canvasCentre + new Vector2( Mathf.Cos(angle) * radius.x, Mathf.Sin(angle) * radius.y); 

在这里输入图像说明

首先,我们反转椭圆的壁球/拉伸,所以我们在“单位圆空间”

 Vector2 delta = (screenPos - canvasCentre); delta.x /= radius.x; delta.y /= radius.y; 

现在我们可以将vector归一化到单位圆上,然后重新引入我们的压扁/拉伸来将结果映射回原始的椭圆:

 delta = normalize(delta); delta.x *= radius.x; delta.y *= radius.y; Vector2 position = canvasCentre + delta;