【问题标题】:Scaling and stretching SVG to four arbitrary corners缩放和拉伸 SVG 到四个任意角
【发布时间】:2026-02-02 15:15:01
【问题描述】:

我有一个宽度为 w、高度为 h 的 SVG 图像(场地平面图),我想在地图背景上查看它。

要将其叠加在地图上的正确位置,我想将其拉伸到四个任意角:x1,y1x2,y2x3,y3x4,y4

我认为我可以通过 SVG 变换(缩放、旋转、倾斜、平移)的组合来做到这一点,但我的数学还远远不能胜任这项工作。有什么线索吗?

【问题讨论】:

    标签: matrix svg geometry transform


    【解决方案1】:

    旋转和平移可以描述Euclidean (i.e. length-preserving) transformations。通过添加各向同性缩放,您可以获得similarity transformations,并且通过各向异性缩放和倾斜,您甚至可以获得affine transformations。这就是您的操作可以表达的那种转换。

    但是仿射变换已经由三个点及其图像唯一定义。这意味着第四个角最终将位于其他三个确定的位置。任意定位四个角,需要projective transformation

    另请参阅this post,了解如何计算投影变换、如何应用它以及如何在 JavaScript 中使用它(如果浏览器支持 3D 投影变换)。

    【讨论】:

    • 非常有帮助。非常感谢!