All pastes #155894 Raw Edit

Mine

public text v1 · immutable
#155894 ·published 2006-08-31 12:12 UTC
rendered paste body
void deflect(object_t *obj1, object_t *obj2)
{
    float impactnormal[2];
    float velocitynorm[2];
    float subtracted[2];
    float dotproduct;

    vector_subtract(subtracted, obj1->position, obj2->position);

    vector_normalise(subtracted, impactnormal);
    vector_normalise(obj1->velocity, velocitynorm);

    dotproduct  = vector_dotproduct(velocitynorm, impactnormal);

    obj1->velocity[0] += impactnormal[0] * -dotproduct * 1.5;
    obj1->velocity[1] += impactnormal[1] * -dotproduct * 1.5;

    obj2->velocity[0] += impactnormal[0] * dotproduct * 1.5;
    obj2->velocity[1] += impactnormal[1] * dotproduct * 1.5;
}

int spherecollide(object_t *obj1, object_t *obj2)
{
    float relpos[1];

    vector_subtract (relpos, obj1->position, obj2->position);

    float dist = relpos[0] * relpos[0] + relpos[1] * relpos[1];

    float minDist = 20 + 40;

    return dist <= minDist * minDist;

    return false;
}

=== main loop ===

        obj->acceleration[0]= 0 / obj->mass;
        obj->acceleration[1] = gravity / obj->mass;
        obj->velocity[0] += obj->acceleration[0] * frametime;
        obj->velocity[1] += obj->acceleration[1] * frametime;

        obj2->acceleration[0]= 0 / obj2->mass;
        obj2->acceleration[1] = gravity / obj2->mass;
        obj2->velocity[0] += obj2->acceleration[0] * frametime;
        obj2->velocity[1] += obj2->acceleration[1] * frametime;

        if(spherecollide(obj, obj2))
        {
            deflect(obj, obj2);
        }

        obj->position[0] += obj->velocity[0] * frametime;
        obj->position[1] += obj->velocity[1] * frametime;

        obj2->position[0] += obj2->velocity[0] * frametime;
        obj2->position[1] += obj2->velocity[1] * frametime;