游戏编程困难的数学问题

Fit*_*tzy 2 iphone math positioning objective-c

我要问的问题可能有些挑战.我将努力使这一点尽可能清晰和有凝聚力.

我正在制作一个游戏,其中有一个"激光环",如下所示:

激光环

当提示时,这个激光环将发射一个"抓钩",这只是下图所示的图像.frame.width调整此图像的属性以使其触发(延长)和缩回(缩短).它从宽度0开始,随着帧的进展,它会延长直到达到所需的点.

在此输入图像描述

这种抓钩在发射时,应与戒指对齐,使它们看起来像是一个物品.为清晰起见,请参阅下图:

在此输入图像描述

*请注意,抓钩的宽度几乎每帧都会改变,因此不能假设一个恒定的宽度.

需要注意的是,由于难以解释的原因,我只能访问frame.center抓钩的frame.origin属性而不是属性.

所以,我给你所有的问题是:我如何,只访问frame.center.xframe.center.y该抓钩的特性,将其放置在激光周围环以这样一种方式,它似乎从环无缝地扩展如图所示在上面的图片 - 大概根据任何给定框架上的抓钩的角度和宽度计算?

任何帮助都非常感谢.

Fog*_*ter 6

好的,我在自己的应用程序中完成了同样的事情.

我做的更容易的技巧是有一个函数来计算线的"unitVector".

即矢量基于线长度1变化.

它只使用简单的pythagorus ...

- (CGSize)unitVectorFromPoint:(CGPoint)start toPoint:(CGPoint)end
{
    //distance between start an end
    float dX = end.x - start.x;
    float dY = end.y - start.y;
    float distance = sqrtf(dX * dX + dY * dY);  // simple pythagorus

    //unit vector is just the difference divided by the distance
    CGSize unitVector = CGSizeMake(dX/distance, dY/distance);

    return unitVector;
}
Run Code Online (Sandbox Code Playgroud)

注意......在开始和结束的哪个方向并不重要,因为数字只会给出正值.

现在,您可以使用此向量到达两点之间的任意点(圆心和目标的中心).

所以,这条线的起点是......

CGPoint center = // center of circle
CGPoint target = // target
float radius = //radius of circle

float dX = center.x - target.x;
float dY = center.y - target.y;

float distance = sqrtf(dX * dX + dY * dY);

CGSize unitVector = [self unitVectorFromPoint:center toPoint:target];

CGPoint startOfLaser = CGPointMake(center.x + unitVector.x * radius, center.y + unitVector.y * radius).

CGPoint midPointOfLaser = CGPointMake(center.x + unitVecotr.x * distance * 0.5, center.y + unitVector.y * distance * 0.5);
Run Code Online (Sandbox Code Playgroud)

这只是将单位矢量乘以你想要的距离(半径)到达该距离线上的点.

希望这会有所帮助:D

如果你想要两点之间的中点,那么你只需要将"半径"改为你想要计算的距离,它就会给你中点.(等等).