какие физические свойства для шаров нужно установить? - PullRequest
1 голос
/ 04 июля 2011

используются следующие физические свойства мячей:

  • мяч для гольфа

    // Create circle shape
    b2CircleShape circle;
    circle.m_radius = 15.5/PTM_RATIO;
    
    // Create ball shape definition and add to body
    b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 5000.0f;
    ballShapeDef.friction = 10.0f;
    ballShapeDef.restitution = 0.2f;
    
    ballFixture = ballBody->CreateFixture(&ballShapeDef);
    
  • крикетбол

    // Create circle shape
    b2CircleShape circle;
    circle.m_radius = 17.0/PTM_RATIO;
    
    // Create ball shape definition and add to body
    b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 5000.0f;
    ballShapeDef.friction = 10.0f;
    ballShapeDef.restitution = 0.4f;
    
    ballFixture = ballBody->CreateFixture(&ballShapeDef);
    
  • железный мяч

    // Create circle shape
    b2CircleShape circle;
    circle.m_radius = 23.0/PTM_RATIO;
    
    // Create ball shape definition and add to body
    b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 5000.0f;
    ballShapeDef.friction = 10.0f;
    ballShapeDef.restitution = 0.0f;
    
    ballFixture = ballBody->CreateFixture(&ballShapeDef);
    
  • футбольный мяч:

    // Create circle shape
    b2CircleShape circle;
    circle.m_radius = 24.0/PTM_RATIO;
    
    // Create ball shape definition and add to body
    b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 5000.0f;
    ballShapeDef.friction = 10.0f;
    ballShapeDef.restitution = 0.8f;
    
    ballFixture = ballBody->CreateFixture(&ballShapeDef);
    
  • баскетбол:

    // Create circle shape
    b2CircleShape circle;
    circle.m_radius = 24.0/PTM_RATIO;
    
    // Create ball shape definition and add to body
    b2FixtureDef ballShapeDef;
    ballShapeDef.shape = &circle;
    ballShapeDef.density = 5000.0f;
    ballShapeDef.friction = 10.0f;
    ballShapeDef.restitution = 0.6f;        
    ballFixture = ballBody->CreateFixture(&ballShapeDef);
    

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

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Во-первых, я не предлагаю вам использовать плотность больше 100. Это обеспечит плохую симуляцию. Сохраняйте плотность в диапазоне 1 - 100. Как и размеры тел в диапазоне [0,1, 10] для динамических тел и до 50 для статических (это из документации box2d). Обычно трение устанавливается между 0 и 1 (также из документации box2d). Таким образом, вы должны работать в своих единицах, чтобы ноги на расстоянии. Например, вы можете измерить плотность в граммах на 1 кубический сантиметр.

Чтобы оценить плотность шара, вам нужно знать его радиус и массу. В этом случае вы можете найти плотность как м / В, где V - объем.

Чтобы измерить реституцию, найдите несколько видео на YouTube и посмотрите, как высоко отскакивает мяч при броске. Восстановление будет h2 / h1, где h1 начальная высота, h2 - высота после отскока

0 голосов
/ 04 июля 2011

Я не думаю, что есть какой-то реальный ответ на этот вопрос, вам, вероятно, придется идти с тем, что кажется вам лучшим. Несколько замечаний: плотность чрезвычайно высока, трение должно быть между 0-1, реституция мяча для гольфа на самом деле довольно высока. Я бы предложил начать с плотности 1 и трения около 0,5 и отрегулировать оттуда.

...