Как я могу найти расстояние между телом и другим телом с указанным c векторным направлением в Материи - js? - PullRequest
0 голосов
/ 14 апреля 2020

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

Как узнать расстояние между прямоугольником робота и ближайшей точкой, с которой сталкивается тело датчика?

Использование collision.seperation не будет работать, так как будет учитываться расстояние от другая сторона после того, как робот находится слишком близко к объекту.

Спасибо

var Engine = Matter.Engine,
    Render = Matter.Render,
    World = Matter.World,
    Body = Matter.Body,
    Constraint = Matter.Constraint,
    Mouse = Matter.Mouse,
    MouseConstraint = Matter.MouseConstraint,
    Events = Matter.Events,
    Common = Matter.Common
    Bodies = Matter.Bodies;

var myCanvas = document.getElementById('world');


var engine = Engine.create();
engine.world.gravity.y = 0;

var render = Render.create({
  canvas: myCanvas,
  engine: engine,
  options: {
    width: 800,
    height: 600,
    wireframes: false
  }
});

var topWall = Bodies.rectangle(400, 50, 720, 20, { isStatic: true });
var wheel1 = Bodies.rectangle(40, 232, 20, 6);
var robotBody = Bodies.rectangle(50, 250, 50, 30 );
var wheel2 = Bodies.rectangle(40, 268, 20, 5);


var sensor2 = Bodies.trapezoid(65, 108, 150, 200, 0.94,  { 
  chamfer: { radius: [50, 0, 0, 50] }});

  Body.setAngle(sensor2, 3.14159);

sensor2.isSensor = true;
sensor2.render.opacity = 0.2;
Body.setMass(sensor2, 0);
Body.setInertia(sensor2, 0);
sensor2.area = 0;



var robot = Body.create({parts: [wheel1, robotBody, wheel2, sensor2]});



Body.setMass(robot, 1000);
robot.friction = 0.9;
robot.frictionAir = 0.5;
Body.setPosition(robot, {x: 200, y: 400});


//add obstacle
var obstacle = Bodies.circle(500, 500, 50);
Body.setMass(obstacle, 100000000);  //make it very heavy

World.add(engine.world, [topWall, robot, obstacle]);



Engine.run(engine);
Render.run(render);


    // add mouse control
    var mouse = Mouse.create(render.canvas),
        mouseConstraint = MouseConstraint.create(engine, {
            mouse: mouse,
            constraint: {
                stiffness: 0.2,
                render: {
                    visible: false
                }
            }
        });

    World.add(engine.world, mouseConstraint);

    // keep the mouse in sync with rendering
    render.mouse = mouse;
<script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.12.0/matter.min.js"></script>
 <canvas id="world"></canvas>
...