移动球与球之间的碰撞线

时间:2011-12-22 21:20:07

标签: objective-c ios cocoa-touch ipad

好的,所以我有这个算法应该检测用户在iPad屏幕上绘制的球和线之间的碰撞。代码非常简单:

for (int i = 1; i < currentPlatform; i++) {
        float x1 = xStart[i] -xBall;
        float y1 = yStart[i] - yBall;
        float x2 = xEnd[i] - xBall;
        float y2 = yEnd[i] - yBall;

        float dx = x2 - x1;
        float dy = y2 - y1;
        float dr = sqrtf(powf(dx, 2) + powf(dy, 2));
        float D = x1*y2 - x2*y1;

        float delta = powf((ball.frame.size.height/2), 2)*powf(dr, 2) - powf(D, 2);

        NSLog(@"%f", delta);

        if (delta >= 0) {
            iDir = (((ballVelocity*(sin(angle[i])))*-1)*kRestitution);//*sin(angle[i]));
            jDir = (((ballVelocity*(cos(angle[i]))))*kRestitution*cos(angle[i]));
        }
    }

唯一的问题是,球没有被检测到!在打印delta的控制台中,它给出了-4万亿的疯狂答案!有没有人看到我在这次碰撞检测中出错了?

1 个答案:

答案 0 :(得分:-1)

我现在没有时间尝试代码,但可以在用户绘图时每次(比如说)0.05秒添加位置标记,将其添加到数组中,然后每次球移动检查它是否在标记上。

或者,您可以制作贝塞尔曲线或其他可以在数学上存储的曲线,然后检查球的位置是否满足线的方程。