Small util to draw ellipses.
What can we do with this?
Log in to post a comment.
const turtle = new Turtle();
const x = 0; // min=-30, max=30, step=1
const y = 0; // min=-30, max=30, step=1
const radiusX = 50; // min=1, max=100, step=1
const radiusY = 25; // min=1, max=100, step=1
const angle = 0; // min=0, max=6.28, step=0.01
const segments = 25; // min=3, max=100, step=1
const ellipsePoints = ellipse(x, y, radiusX, radiusY, angle, segments);
function walk() {
// line from center
const center = [x,y];
turtle.jump(center);
turtle.goto(ellipsePoints[0]);
circle(center);
// points
drawPoints(ellipsePoints);
// visualize segments
drawDebugCircles(ellipsePoints);
}
function drawPoints(pts) {
let p = pts[pts.length-1];
turtle.jump(p);
pts.forEach(p => turtle.goto(p));
}
function drawDebugCircles(pts,radius = 0.75) {
pts.forEach(p => circle(p, radius));
}
function circle(p,radius = 1) {
turtle.jump(p[0],p[1]-radius);
turtle.circle(radius);
}
function ellipse(x = 0, y = 0, radiusX = 40, radiusY = 20, angle = 0, segments = 15) {
return Array.from({length: segments}, (_, i) => (i / segments) * Math.PI*2).map(ang => ([
x - (radiusY * Math.sin(ang)) * Math.sin(angle) + (radiusX * Math.cos(ang)) * Math.cos(angle),
y + (radiusX * Math.cos(ang)) * Math.sin(angle) + (radiusY * Math.sin(ang)) * Math.cos(angle),
]));
}