Detect if the given point lies on the line in Line Chart - CanvasJS JavaScript Charts
Detect if the given point lies on the line in Line Chart - CanvasJS JavaScript Charts
by canvasjs
HTML
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<br/><!-- Just so that JSFiddle's Result label doesn't overlap the Chart -->
<div id="chartContainer" style="height: 360px; width: 100%;"></div>
JavaScript
var chart = new CanvasJS.Chart("chartContainer", {
title: {
text: "Detect if the point on Line"
},
data: [
{
type: "line",
dataPoints: [
{ x: 10, y: 71 },
{ x: 20, y: 55 },
{ x: 30, y: 50 },
{ x: 40, y: 65 },
{ x: 50, y: 95 },
{ x: 60, y: 68 },
{ x: 70, y: 28 },
{ x: 80, y: 34 },
{ x: 90, y: 14 }
]
}
]
});
chart.render();
var startX = chart.axisX[0].convertValueToPixel(10);
var endX = chart.axisX[0].convertValueToPixel(20);
var startY = chart.axisY[0].convertValueToPixel(71);
var endY = chart.axisY[0].convertValueToPixel(55);
var pointX = chart.axisX[0].convertValueToPixel(10);
var pointY = chart.axisY[0].convertValueToPixel(71);
var pointIsOnLine = isOnLine(startX, startY, endX, endY, pointX, pointY);
if(pointIsOnLine)
console.log("Given point is on the line");
else
console.log("Given point is not he line");
function isOnLine(startX, startY, endX, endY, px, py) {
var f = function(someX) { return (endY - startY) / (endX - startX) * (someX - startX) + startY; };
return Math.abs(f(px) - py) < 1e-6 // tolerance, rounding errors
&& px >= startX && px <= endX; // are they also on this segment?
}