Skip to content

Instantly share code, notes, and snippets.

@mulderu
Created January 23, 2019 07:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mulderu/50881eadd53e28bacfcb00ff79c4c220 to your computer and use it in GitHub Desktop.
Save mulderu/50881eadd53e28bacfcb00ff79c4c220 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/nificif
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/victor/1.1.0/victor.js"></script>
<script src="https://data.jsdelivr.com/v1/package/npm/vectorjs/badge?style=rounded"></script>
</head>
<body>
<div id="canvas_container">
</div>
<script id="jsbin-javascript">
var angle_vectors = function (A, B, C, D){
var vector_1 = {
x: B[0] - A[0],
y: B[1] - A[1]
};
var vector_2 = {
x: D[0] - C[0],
y: D[1] - C[1]
};
var rad_angle = Math.atan2(vector_2.y, vector_2.x) - Math.atan2(vector_1.y, vector_1.x);
return rad_angle * 180 / Math.PI;
}
$(document).ready(function() {
var paper = new Raphael(document.getElementById('canvas_container'), 2000, 2000);
let data = [ 'A - B Plane Angle',
'Angle A-B, C-D',
[ 1858, 1491 ],
[ 1946, 1030 ],
[ 1877, 1624 ],
[ 2034, 346 ],
3.8035487094310243 ];
data = [ 'Facial angle (Downs)',
'Angle A-B, C-D',
[1321, 869]
,[1451, 1739]
,[1266, 1080]
,[668, 1074]];
let dd = data.slice(2,6).map((d)=>{ return [(d[0]-300)/2, (d[1]-300)/2]; });
dd.forEach((d, i)=>{
console.log(d,i)
paper.circle(d[0], d[1], 5).attr({hue: .45});
paper.text(d[0], d[1], i);
})
paper.path(`M${dd[0][0]} ${dd[0][1]}L${dd[1][0]} ${dd[1][1]}`)
.attr({"stroke-width": 1, stroke: "green"});
paper.path(`M${dd[2][0]} ${dd[2][1]}L${dd[3][0]} ${dd[3][1]}`)
.attr({"stroke-width": 1, stroke: "red"});
function tov(x) { return new Victor(x[0],x[1]); }
let v1 = tov(dd[0]);
let v2 = tov(dd[1]);
let v3 = tov(dd[2]);
let v4 = tov(dd[3]);
let nn = 0;
paper.text(300,100, v1.angleDeg()-v2.angleDeg());
paper.text(300,100+(++nn*20), v3.angleDeg()-v4.angleDeg());
paper.text(300,100+(++nn*20), [v1.angleDeg(),v2.angleDeg(),v3.angleDeg(),v4.angleDeg()].join(",") );
paper.text(300,100+(++nn*20), angle_vectors(dd[0],dd[1],dd[2],dd[3]));
paper.text(300,100+(++nn*20), angle_vectors(dd[2],dd[3],dd[0],dd[1]));
});
</script>
<script id="jsbin-source-javascript" type="text/javascript">var angle_vectors = function (A, B, C, D){
var vector_1 = {
x: B[0] - A[0],
y: B[1] - A[1]
};
var vector_2 = {
x: D[0] - C[0],
y: D[1] - C[1]
};
var rad_angle = Math.atan2(vector_2.y, vector_2.x) - Math.atan2(vector_1.y, vector_1.x);
return rad_angle * 180 / Math.PI;
}
$(document).ready(function() {
var paper = new Raphael(document.getElementById('canvas_container'), 2000, 2000);
let data = [ 'A - B Plane Angle',
'Angle A-B, C-D',
[ 1858, 1491 ],
[ 1946, 1030 ],
[ 1877, 1624 ],
[ 2034, 346 ],
3.8035487094310243 ];
data = [ 'Facial angle (Downs)',
'Angle A-B, C-D',
[1321, 869]
,[1451, 1739]
,[1266, 1080]
,[668, 1074]];
let dd = data.slice(2,6).map((d)=>{ return [(d[0]-300)/2, (d[1]-300)/2]; });
dd.forEach((d, i)=>{
console.log(d,i)
paper.circle(d[0], d[1], 5).attr({hue: .45});
paper.text(d[0], d[1], i);
})
paper.path(`M${dd[0][0]} ${dd[0][1]}L${dd[1][0]} ${dd[1][1]}`)
.attr({"stroke-width": 1, stroke: "green"});
paper.path(`M${dd[2][0]} ${dd[2][1]}L${dd[3][0]} ${dd[3][1]}`)
.attr({"stroke-width": 1, stroke: "red"});
function tov(x) { return new Victor(x[0],x[1]); }
let v1 = tov(dd[0]);
let v2 = tov(dd[1]);
let v3 = tov(dd[2]);
let v4 = tov(dd[3]);
let nn = 0;
paper.text(300,100, v1.angleDeg()-v2.angleDeg());
paper.text(300,100+(++nn*20), v3.angleDeg()-v4.angleDeg());
paper.text(300,100+(++nn*20), [v1.angleDeg(),v2.angleDeg(),v3.angleDeg(),v4.angleDeg()].join(",") );
paper.text(300,100+(++nn*20), angle_vectors(dd[0],dd[1],dd[2],dd[3]));
paper.text(300,100+(++nn*20), angle_vectors(dd[2],dd[3],dd[0],dd[1]));
});
</script></body>
</html>
var angle_vectors = function (A, B, C, D){
var vector_1 = {
x: B[0] - A[0],
y: B[1] - A[1]
};
var vector_2 = {
x: D[0] - C[0],
y: D[1] - C[1]
};
var rad_angle = Math.atan2(vector_2.y, vector_2.x) - Math.atan2(vector_1.y, vector_1.x);
return rad_angle * 180 / Math.PI;
}
$(document).ready(function() {
var paper = new Raphael(document.getElementById('canvas_container'), 2000, 2000);
let data = [ 'A - B Plane Angle',
'Angle A-B, C-D',
[ 1858, 1491 ],
[ 1946, 1030 ],
[ 1877, 1624 ],
[ 2034, 346 ],
3.8035487094310243 ];
data = [ 'Facial angle (Downs)',
'Angle A-B, C-D',
[1321, 869]
,[1451, 1739]
,[1266, 1080]
,[668, 1074]];
let dd = data.slice(2,6).map((d)=>{ return [(d[0]-300)/2, (d[1]-300)/2]; });
dd.forEach((d, i)=>{
console.log(d,i)
paper.circle(d[0], d[1], 5).attr({hue: .45});
paper.text(d[0], d[1], i);
})
paper.path(`M${dd[0][0]} ${dd[0][1]}L${dd[1][0]} ${dd[1][1]}`)
.attr({"stroke-width": 1, stroke: "green"});
paper.path(`M${dd[2][0]} ${dd[2][1]}L${dd[3][0]} ${dd[3][1]}`)
.attr({"stroke-width": 1, stroke: "red"});
function tov(x) { return new Victor(x[0],x[1]); }
let v1 = tov(dd[0]);
let v2 = tov(dd[1]);
let v3 = tov(dd[2]);
let v4 = tov(dd[3]);
let nn = 0;
paper.text(300,100, v1.angleDeg()-v2.angleDeg());
paper.text(300,100+(++nn*20), v3.angleDeg()-v4.angleDeg());
paper.text(300,100+(++nn*20), [v1.angleDeg(),v2.angleDeg(),v3.angleDeg(),v4.angleDeg()].join(",") );
paper.text(300,100+(++nn*20), angle_vectors(dd[0],dd[1],dd[2],dd[3]));
paper.text(300,100+(++nn*20), angle_vectors(dd[2],dd[3],dd[0],dd[1]));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment