JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE HTML>
<html>
<head>
<title>Editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.3.1.min.js"></script>
</head>
<body>
<div id="canvas"></div>
</body>
</html>
JavaScript
/* Canvas */
var cns = new Kinetic.Stage({
container: 'canvas',
width: 600,
height: 450
});
var layer = new Kinetic.Layer();
/* Settings */
var car = {
x: 100,
y: 200,
direction: -1.46,
speed: 0,
speedStep: .5,
speedLimit: 7,
degrees: 0.1
}
var po = {
x: 500,
y: 400
}
/* Create car */
var vishe = new Kinetic.Circle({
id:'car',
x: car.x,
y: car.y,
radius: 50,
opacity: 0.3,
fill: 'red',
});
layer.add(vishe);
var point = new Kinetic.Circle({
id:'car',
x: po.x,
y: po.y,
radius: 3,
opacity: 1,
fill: 'red',
});
var pointR = new Kinetic.Circle({
x: car.x - 30,
y: car.y,
radius: 3,
opacity: 1,
fill: 'red',
//offset:[30,0]
});
layer.add(point);
layer.add(pointR);
function ToD(x,y,x2,y2){
return Math.sqrt(Math.pow(x-x2,2) + Math.pow(y-y2,2))
}
/* All Function */
function moveCar(){
var degre = direct = {}, d = ToD(car.x,car.y,po.x,po.y);
var dc = car.speed * 12;
// speed
if(d < dc) {
car.speed += (car.speed < 0) ? car.speedStep : (car.speed > 0) ? -car.speedStep : 0;
}
else car.speed += car.speed < car.speedLimit ? car.speedStep : 0;
if(d < 2) return;
degre['p'] = Math.atan2(po.y - car.y,po.x - car.x);
degre['c'] = car.direction - degre.p;
// выравниваем на -Pi +Pi
if(degre['c']>Math.PI)degre['c']-=2*Math.PI;
if(degre['c']<-Math.PI)degre['c']+=2*Math.PI;
if(degre.c>car.degrees){
degre['g']=+car.degrees
} else if(degre.c<-car.degrees) {
degre['g']=-car.degrees
} else {
degre['g']=car.direction -degre.p;
}
degre['d'] = car.direction - degre.g ;
var speedX = car.speed * Math.cos(degre.d);
var speedY = car.speed * Math.sin(degre.d);
car.x += speedX;
car.y += speedY;
car.direction = degre.d;
vishe.setPosition(car.x,car.y);
pointR.setAttrs({
x: car.x + 30 *...