Столкновение между движущимся мячом и линией - PullRequest
1 голос
/ 23 декабря 2011

ОК, поэтому у меня есть этот алгоритм, который ДОЛЖЕН обнаружить столкновение между мячом и линией, которую пользователь рисует на экране 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]));
        }
    }

Единственная проблема в том, что мяч проходит через линию незамеченным! И в консоли, где напечатана дельта, она дает сумасшедшие ответы, такие как -4 трлн! Кто-нибудь видит что-то, что я делаю неправильно с этим обнаружением столкновений?

1 Ответ

0 голосов
/ 23 декабря 2011

У меня нет времени, чтобы попробовать код сейчас, но можно ли будет добавлять метку местоположения каждые 0.05 секунды, когда пользователь рисует, добавляя его в массив, а затем каждый раз, когда мяч движется проверьте, находится ли он на маркере.

В качестве альтернативы, вы можете создать кривую Безье или другую кривую, которую можно математически сохранить, и затем проверить, удовлетворяет ли положение шара уравнению линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...