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

如何实现600×600画布上图形坐标的90度顺时针旋转?

绕600×600画布中心顺时针旋转90度的坐标转换方案

核心转换公式

针对600×600的画布,中心坐标为(300,300),结合屏幕坐标系(y轴向下)的特性,任意点(x,y)绕中心顺时针旋转90度后的新坐标(x', y')可简化为:

x' = 600 - y
y' = x

推导逻辑:

  1. 计算点相对于中心的偏移:dx = x - 300,dy = y - 300
  2. 顺时针旋转90度后的偏移(适配屏幕y轴向下):dx' = -dy,dy' = dx
  3. 转换回绝对坐标:x' = 300 + dx' = 600 - y,y' = 300 + dy' = x

正确代码实现

无需计算形状的宽高,直接对每个形状的起始点和结束点单独应用转换公式即可:

foreach (TekeningElement t in getekende_elementen)
{
    // 转换起始点
    Point oldStart = t.GetBeginPunt;
    Point newStart = new Point(600 - oldStart.Y, oldStart.X);
    
    // 转换结束点
    Point oldEnd = t.GetEindPunt;
    Point newEnd = new Point(600 - oldEnd.Y, oldEnd.X);
    
    // 更新形状坐标
    t.SetBeginPunt = newStart;
    t.SetEindPunt = newEnd;
}

原代码问题分析

你原代码中通过宽高(x_verschil/y_verschil)推导新坐标的逻辑存在错误:

  • 旋转操作仅与点自身坐标及中心位置相关,无需依赖形状的宽高参数
  • 原公式会导致坐标偏移,无法实现正确的绕中心旋转效果

验证示例

以起始点(100,100)、结束点(200,300)的矩形为例:

  • 旋转后起始点:(600-100, 100) → (500,100)
  • 旋转后结束点:(600-300, 200) → (300,200)
    旋转后的矩形宽为200、高为100,正好是原矩形的高和宽交换,完全符合顺时针旋转90度的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:40:28