You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取P5JS中经平移和旋转后绘制点的实际坐标

获取P5.js中变换后图形的实际坐标

P5.js的平移、旋转等变换本质是通过变换矩阵作用于坐标点,你可以获取当前的变换矩阵,通过矩阵运算得到原始点经过变换后的实际画布坐标。以下是两种可行的解决方案:

基础示例(对应你的代码)

function setup() {
  let canvas = createCanvas(400, 400);
  noLoop();
}

function draw() {
  background(220);

  push();
  translate(50,100);
  point(25,25);
  
  // 方法1:使用P5.js内置的getMatrix()
  let transformMatrix = getMatrix();
  // 矩阵运算公式:x' = a*x + c*y + e; y' = b*x + d*y + f
  // 矩阵顺序:[a, b, c, d, e, f]
  let worldX = transformMatrix[0] * 25 + transformMatrix[2] * 25 + transformMatrix[4];
  let worldY = transformMatrix[1] * 25 + transformMatrix[3] * 25 + transformMatrix[5];
  console.log("变换后坐标(方法1):", worldX, worldY); // 输出75, 125
  
  // 方法2:使用Canvas原生上下文的变换矩阵(更简洁)
  let domMatrix = drawingContext.getTransform();
  let transformedPoint = domMatrix.transformPoint(new DOMPoint(25, 25));
  console.log("变换后坐标(方法2):", transformedPoint.x, transformedPoint.y); // 输出75, 125
  
  pop();
}

包含旋转的复杂场景

如果加入旋转变换,两种方法依然适用,无需修改核心逻辑:

function draw() {
  background(220);

  push();
  translate(50,100);
  rotate(radians(45)); // 新增45度旋转
  point(25,25);
  
  // 用方法2快速计算旋转后的实际坐标
  let domMatrix = drawingContext.getTransform();
  let transformedPoint = domMatrix.transformPoint(new DOMPoint(25, 25));
  console.log("旋转后实际坐标:", transformedPoint.x, transformedPoint.y);
  
  pop();
}

关键说明

  • getMatrix()返回的是P5.js封装的变换矩阵数组,顺序对应标准齐次变换矩阵的参数,手动计算时要注意参数顺序。
  • 原生Canvas的getTransform()返回DOMMatrix对象,transformPoint()方法可以直接完成矩阵与点的乘法运算,代码更简洁不易出错。

内容的提问来源于stack exchange,提问作者user1843376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:45:37