Exemplo n.º 1
0
bool lib_hack(Conjunct *c, DNF * d, Rel_Body * rb) {
    bool result=0;
    if (WANT_SEGM_FAULT) {
// relation constructors
        Relation r(0,0);
        Relation rc(r,c);
        Relation rbi(*rb,1);
        Relation r0;
        Relation rr(r);

// input/output variable functions
        r.n_inp();
        r.n_out();
        r.n_set();
        r.input_var(1);
        r.output_var(1);
        r.set_var(1);

//other functions
        rr=r;
        result = r.is_upper_bound_satisfiable();
        d->prefix_print(NULL);
    }
    return result;
}
Exemplo n.º 2
0
void MiuraModel::makeMiura(int vehicle_id,
                           DisplayInterface * di,
                           bool add_ghost,
                           const btVector3 & origin,
                           float rotation)
{
    if (!vehicle_config_ptr) return;

btRigidBody * ghost = 0;
// miurabody0
    if (add_ghost)
    {
    btTriangleIndexVertexArray * miurabody0_mi = new btTriangleIndexVertexArray();

        for (unsigned int z=0;z<miurabody0_meshes.size();z++)
        {
        Mesh m = miurabody0_meshes.at(z);

        btVector3 * va = new btVector3[m.vertices_size/3];

        unsigned int * ia = new unsigned int[m.faces_size/4];
        
        int j = -1;
            for (unsigned int ind0 = 0; ind0 < m.vertices_size; ind0+=3 )
            {
            va[++j].setValue(btScalar( *(m.p_vertices + ind0 + 0)),
                             btScalar( *(m.p_vertices + ind0 + 1)),
                             btScalar( *(m.p_vertices + ind0 + 2)));
            }

        int i = -1;
            for (unsigned int ind1 = 0; ind1 < m.faces_size; ind1+=12 )
            {
            unsigned int c1  = *(m.p_faces + ind1 + 0);
            unsigned int c2  = *(m.p_faces + ind1 + 4);
            unsigned int c3  = *(m.p_faces + ind1 + 8);
            ia[++i] = c1-1;
            ia[++i] = c2-1;
            ia[++i] = c3-1;
            }

        btIndexedMesh * im = new btIndexedMesh();
        im->m_numTriangles = m.faces_size/12;
        im->m_triangleIndexBase = reinterpret_cast<unsigned char*>(ia);
        im->m_triangleIndexStride = 3*sizeof(unsigned int);
        im->m_numVertices = j+1;
        im->m_vertexBase = reinterpret_cast<unsigned char*>(&va[0][0]);
        im->m_vertexStride = sizeof(btVector3);
        miurabody0_mi->addIndexedMesh(*im);
        ArraysTrack at;
        at.vertex_array = va;
        at.index_array  = ia;
        at.indexed_mesh = im;
        arrays_track.push_back(at);
        }

    btGImpactMeshShape * miurabody0_shape = new btGImpactMeshShape(miurabody0_mi);
    miurabody0_shape->updateBound();
    collision_shapes.push_back(miurabody0_shape);
    ArraysTrack at0;
    at0.mesh_interface = miurabody0_mi;
    arrays_track.push_back(at0);

    btTransform t;
    t.setIdentity();
    t.setOrigin(origin);
    
    MyKinematicMotionState * motion_state = new MyKinematicMotionState(t);
    btRigidBody::btRigidBodyConstructionInfo rbi(0.,motion_state,miurabody0_shape);
    ghost = new btRigidBody(rbi);
    
    int * usrP = new int[2];
    usrP[0] = vehicle_id + 1; // group id, don't collide inside the group, here group with id "1"
    usrP[1] = 2; // wheel raytest (MyVehicleRayResultCallback), "1" to process, "2" skip
    ghost->setUserPointer(usrP);
    ghost->setCollisionFlags( ghost->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE);
    //ghost->setCollisionFlags( ghost->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
    ghost->setActivationState(DISABLE_DEACTIVATION);
    m_dynamicsWorld->addRigidBody(ghost);
    }

VehicleConfig * vehicle_config = new VehicleConfig;
vehicle_config->vehicle_mass           = btScalar(vehicle_config_ptr[0]);
vehicle_config->max_suspension_force   = btScalar(vehicle_config_ptr[1]);
vehicle_config->suspension_stiffness   = btScalar(vehicle_config_ptr[2]);
vehicle_config->damping_relaxation     = btScalar(vehicle_config_ptr[3]);
vehicle_config->damping_compression    = btScalar(vehicle_config_ptr[4]);
vehicle_config->suspension_rest_length = btScalar(vehicle_config_ptr[5]);
vehicle_config->max_suspension_travel  = btScalar(vehicle_config_ptr[6]);
vehicle_config->roll_influence         = btScalar(vehicle_config_ptr[7]);
vehicle_config->inertia_coefficient    = btScalar(vehicle_config_ptr[8]);
//= btScalar(vehicle_config_ptr[ 9]);
//= btScalar(vehicle_config_ptr[10]);
vehicle_config->max_braking_force      = btScalar(vehicle_config_ptr[11]);
vehicle_config->steering_clamp         = btScalar(vehicle_config_ptr[12]);
vehicle_config->chassis_mass_y_shift   = btScalar(vehicle_config_ptr[13]);
vehicle_config->chassis_mass_z_shift   = btScalar(vehicle_config_ptr[14]);
vehicle_config->fwheel_radius          = btScalar(vehicle_config_ptr[15]);
vehicle_config->rwheel_radius          = btScalar(vehicle_config_ptr[16]);
vehicle_config->fwheel_width           = btScalar(vehicle_config_ptr[17]);
vehicle_config->rwheel_width           = btScalar(vehicle_config_ptr[18]);
vehicle_config->chassis_friction       = btScalar(vehicle_config_ptr[19]);
vehicle_config->chassis_restitution    = btScalar(vehicle_config_ptr[20]);
vehicle_config->chassis_angular_dump   = btScalar(vehicle_config_ptr[21]);
vehicle_config->chassis_linear_dump    = btScalar(vehicle_config_ptr[22]);
vehicle_config->steering_wheel_factor  = btScalar(vehicle_config_ptr[23]);
vehicle_config->steering_wheel_sensitivity = btScalar(vehicle_config_ptr[30]);
// = btScalar(vehicle_config_ptr[24]);
// = btScalar(vehicle_config_ptr[25]);
vehicle_config->Crr                    = btScalar(vehicle_config_ptr[29]);
vehicle_config->vehicle_steering = btScalar(0.0);
vehicle_config->origin = btVector3(origin);
vehicle_config->right_index = 0;
vehicle_config->up_index = 1;
vehicle_config->forward_index = 2;
vehicle_config->wheel_direction_CS0 = btVector3(btScalar(0.0), btScalar(-1.0), btScalar(0.0));
vehicle_config->wheel_axle_CS = btVector3(btScalar(-1.0), btScalar(0.0), btScalar(0.0));
vehicle_config->steering_wheel_axis = btVector3(btScalar(0.0), btScalar(0.371), btScalar(-0.928));
//vehicle_config->steering_wheel_pos = btVector3(world_loc_miura_rul[0],world_loc_miura_rul[1],world_loc_miura_rul[2]);
//vehicle_config->driver_pos = btVector3(btScalar(world_loc_miura[0] + 0.35f),
//                          btScalar(world_loc_miura[1] + 0.3f  - c->chassis_mass_y_shift),
//                          btScalar(world_loc_miura[2] - 0.35f - c->chassis_mass_z_shift));
btScalar f_wheel_y = btScalar(-0.308666);
btScalar r_wheel_y = f_wheel_y;

vehicle_config->wheel_fr_v = btVector3( btScalar(-0.714463),
                           -(vehicle_config->chassis_mass_y_shift) + f_wheel_y,
                           btScalar(1.186053) - vehicle_config->chassis_mass_z_shift);

vehicle_config->wheel_fl_v = btVector3( btScalar(0.714463),
                           -(vehicle_config->chassis_mass_y_shift) + f_wheel_y,
                           btScalar(1.186053) - vehicle_config->chassis_mass_z_shift);

vehicle_config->wheel_br_v = btVector3( btScalar(-0.714463),
                           -(vehicle_config->chassis_mass_y_shift) + r_wheel_y,
                           btScalar(-1.313947) - vehicle_config->chassis_mass_z_shift);

vehicle_config->wheel_bl_v = btVector3( btScalar(0.714463),
                           -(vehicle_config->chassis_mass_y_shift) + r_wheel_y,
                           btScalar(-1.313947) - vehicle_config->chassis_mass_z_shift);

//////////////////////////////////////////////////////


{
int vertex_stride = sizeof(btVector3);
btVector3 * vertex_array = new btVector3[vertices_size_miura_proxy/3];

int j = -1;
    for ( int ind = 0; ind < vertices_size_miura_proxy; ind+=3 )
    {
    vertex_array[++j].setValue(btScalar( *(p_vertices_miura_proxy+ind+0)),
                               btScalar( *(p_vertices_miura_proxy+ind+1)),
                               btScalar( *(p_vertices_miura_proxy+ind+2)));
    }
btCollisionShape * shape = new btConvexHullShape((btScalar *) &vertex_array[0][0],vertices_size_miura_proxy/3,vertex_stride);
 
ArraysTrack bo;
bo.vertex_array = vertex_array;
arrays_track.push_back(bo);

btCompoundShape * compound = new btCompoundShape();

btTransform chassis_local_trans;
chassis_local_trans.setIdentity();
chassis_local_trans.setOrigin(btVector3(btScalar(0.0),
                                        -(vehicle_config->chassis_mass_y_shift),
                                        -(vehicle_config->chassis_mass_z_shift)));
compound->addChildShape(chassis_local_trans,shape);
collision_shapes.push_back(compound);

btTransform compound_trans;
compound_trans.setIdentity();
compound_trans.setOrigin(vehicle_config->origin);
btQuaternion q(btVector3(btScalar(0.),btScalar(1.),btScalar(0.)),btScalar(rotation));
compound_trans.setRotation(q);

btRigidBody * chassis;
chassis = create_rigid_body(vehicle_config->vehicle_mass,
                            compound_trans, 
                            compound,
                            vehicle_config->chassis_friction,
                            vehicle_config->chassis_restitution,
                            vehicle_config->chassis_angular_dump,
                            vehicle_config->chassis_linear_dump);

chassis->setLinearVelocity(btVector3(btScalar(0.0),btScalar(0.0),btScalar(0.0)));
chassis->setAngularVelocity(btVector3(btScalar(0.0),btScalar(0.0),btScalar(0.0)));
int * usrP = new int[2];
usrP[0] = vehicle_id + 1;// group id, don't collide inside the group, here group with id "1"
usrP[1] = 1;// wheel raytest (MyVehicleRayResultCallback), "2" to skip
chassis->setUserPointer(usrP);

RaycastCar * vehicle = new RaycastCar(chassis);
vehicle->m_dynamicsWorld = m_dynamicsWorld;
chassis->setActivationState(DISABLE_DEACTIVATION);

vehicle->setCoordinateSystem(vehicle_config->right_index,
                             vehicle_config->up_index,
                             vehicle_config->forward_index);
vehicle->m_Crr = vehicle_config->Crr;
vehicle->m_inertia_coef = vehicle_config->inertia_coefficient;

    for (int x=0;x<4;x++) vehicle->addWheel(vehicle_config, x);

VehicleObject * vo = new VehicleObject;
vo->set_raycast_vehicle(vehicle);
vo->set_compound_shape(compound);
vo->set_chassis_shape(shape);
vo->set_chassis_body(chassis);
    if (add_ghost) vo->set_ghost_body(ghost);
vo->set_vehicle_config(vehicle_config);
vo->set_draw_object(di);
vo->draw_wheel_fr = draw_wheel_fr;
vo->draw_wheel_fl = draw_wheel_fl;
vo->draw_wheel_rr = draw_wheel_rr;
vo->draw_wheel_rl = draw_wheel_rl;

    if (vehicles.size() <= vehicle_id)
    {
    vehicles.push_back(vo);
    }
    else
    {
    vehicles[vehicle_id] = vo;
    }

m_dynamicsWorld->addAction(vehicle);
}
/////////////////////////////////////////////////////


}