personal-site/utils/draw.ts

36 lines
1,014 B
TypeScript

import type { PointLike } from './point'
let ctx: CanvasRenderingContext2D
let volumeMultiplier: number
export function initDrawVars(ctx_: CanvasRenderingContext2D) {
ctx = ctx_
updateDrawVars()
}
export function updateDrawVars() {
volumeMultiplier = (ctx.canvas.width * ctx.canvas.height) / 150
ctx.lineWidth = 0.75
}
function getTransparency(point0: PointLike, point1: PointLike) {
const distanceSquared = (point0.x - point1.x) ** 2 + (point0.y - point1.y) ** 2
const transparency = (volumeMultiplier / distanceSquared) - 0.1
return Math.min(Math.floor(transparency * 255), 255)
}
export function drawLine(point0: PointLike, point1: PointLike) {
const transparency = getTransparency(point0, point1)
if (transparency <= 0)
return
let opacityHex = transparency.toString(16)
if (opacityHex.length === 1)
opacityHex = `0${opacityHex}`
ctx.strokeStyle = `#FFFFFF${opacityHex}`
ctx.beginPath()
ctx.moveTo(point0.x, point0.y)
ctx.lineTo(point1.x, point1.y)
ctx.stroke()
}