@turbox3d/shared
Version:
turbox shared internal utility
43 lines (38 loc) • 937 B
text/typescript
export interface Vec2 {
x: number;
y: number;
}
export interface Vec3 {
x: number;
y: number;
z: number;
}
/** 判断点是否在矩形内 */
export function pointInRect(p: Vec2, rect: Vec2[]) {
const [r1, r2] = rect;
const c1 = (p.x - r1.x) * (p.x - r2.x);
const c2 = (p.y - r1.y) * (p.y - r2.y);
return c1 <= 0 && c2 <= 0;
}
interface ICanvasRect {
width: number;
height: number;
x: number;
y: number;
}
/**
* 获得点击位置相对于 canvas 的坐标
* 如果输入参数不合法,或点击位置超出 canvas 的 clientRect 则返回 undefined
* @param vec 事件坐标
* @param canvas 要接受的 canvas 对象
*/
export function getRelativePositionFromEvent(vec: Vec2, rect: ICanvasRect) {
const point = {
x: vec.x - rect.x,
y: vec.y - rect.y,
};
if (point.x <= 0 || point.y <= 0 || point.x > rect.width || point.y > rect.height) {
return undefined;
}
return point;
}