这可能比Spritekit或Xcode特有的数学问题更多,但我想知道是否有人知道会产生预期效果的函数。
我使用下面的代码创建了一个椭圆。
var shape = SKShapeNode(ellipseOfSize: CGSize(width: 400, height: 240))
我可以使用触摸事件在形状中找到触摸的位置。
我希望有一个函数可以获取这些坐标并返回最近边的坐标,并且可以选择减少x量(比如说10%)。
我可以想象从椭圆中心向外画一条线,但我不确定这是否是正确的方法。显然,可以使用公式。
任何人都可以帮助解决问题,还是指向正确的方向?
答案 0 :(得分:0)
最近边?椭圆没有边缘。
我怀疑你的意思是椭圆上的最近点
给定:带半轴a和b的椭圆,以(0,0)为中心,点P =(px,py)
需要:椭圆周长上的点坐标,最接近P
让我们表示A = a ^ 2,B = b ^ 2
现在使用拉格朗日乘数法我们可以得到
x = px / (k/A + 1)
y = py / (k/B + 1)
并用椭圆方程代替它们
x^2/A + y^2/B = 1
A * px^2 / (k + A)^2 + B * py^2 / (k + B)^2 = 1
A * px^2 * (k + B)^2 + B * py^2 * (k + A)^2 =(k + A)^2 * (k + B)^2
求解未知k的最后二次方程,找到实根(最多有四个根),计算每个k的x和y,并选择到P点的最小距离。