This JavaScript program demonstrates how to graph a set of points on a canvas element with a transformation to vertically flip the context and translate the origin to the bottom.
<!DOCTYPE html>
<html>
<head>
<title>XoaX.net's Javascript</title>
<script type="text/javascript" src="GraphPoints.js"></script>
</head>
<body onload="Initialize()">
<canvas id="idCanvas" width="640" height ="640" style="background-color: #F0F0F0;"></canvas>
</body>
</html>function Initialize() {
const qCanvas = document.getElementById("idCanvas");
const qContext2D = qCanvas.getContext("2d");
// This flips the y-axis and translates.
qContext2D.transform(1, 0, 0, -1, 0, qCanvas.height);
// Draw the x and y axes
qContext2D.strokeStyle = "black";
qContext2D.lineWidth = 5;
qContext2D.beginPath();
// x-axis
qContext2D.moveTo(0, 0);
qContext2D.lineTo(qCanvas.width, 0);
// y-axis
qContext2D.moveTo(0, 0);
qContext2D.lineTo(0, qCanvas.height);
qContext2D.stroke();
const kdMaxX = 100;
const kdMaxY = 100;
// Draw grid lines
qContext2D.lineWidth = .25;
qContext2D.strokeStyle = "gray";
for (let i = 5; i < 100; i= i + 5) {
qContext2D.beginPath();
// Alteranate the line thickness
qContext2D.lineWidth = .125/((i % 10)/5 + 1);
let dPixelX = qCanvas.width*i/kdMaxX;
let dPixelY = qCanvas.height*i/kdMaxY;
// Vertical
qContext2D.moveTo(dPixelX, 0);
qContext2D.lineTo(dPixelX, qCanvas.height);
// Horizontal
qContext2D.moveTo(0, dPixelY);
qContext2D.lineTo(qCanvas.width, dPixelY);
qContext2D.stroke();
}
// Draw the points
const kuiaPoints = [[40, 50], [90, 10], [50, 30], [20, 30],
[50, 80], [20, 10], [10, 80], [70, 90], [80, 30], [30, 70],
[10, 50], [60, 20]];
qContext2D.fillStyle = "red";
const kdPixelRadius = 3;
const kdRotation = 0;
const kdStartAngle = 0;
const kdEndAngle = 2*Math.PI;
for (let i = 0; i < kuiaPoints.length; ++i) {
let dPixelX = qCanvas.width*kuiaPoints[i][0]/kdMaxX;
let dPixelY = qCanvas.height*kuiaPoints[i][1]/kdMaxY;
qContext2D.beginPath();
qContext2D.ellipse(dPixelX, dPixelY, kdPixelRadius, kdPixelRadius, kdRotation, kdStartAngle, kdEndAngle);
qContext2D.fill();
}
}
© 20072025 XoaX.net LLC. All rights reserved.