Я использую 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>