翻转svg坐标系
有没有办法翻转SVG坐标系,使[0,0]位于左下方而不是左上方?
我做了很多实验,唯一合乎逻辑的方法如下:
<g transform="translate(0,400)"> <g transform="scale(1,-1)">
其中400是图像的高度。 这是什么,它将所有的东西都移动到图像的顶部,并且是图像的底部,然后缩放操作翻转Y坐标,这样现在离开页面/图像的位就被翻转回来填充留下的空间。
我知道这是旧的,但我做了同样的事情,尝试@Nippysaurus版本,但这是太烦人,因为一切都将被旋转(所以如果你把图像,你将不得不把它们旋转回来)。 还有另一个解决scheme
我所做的仅仅是移动svg
的viewBox,并将y轴上的所有坐标反转(并将对象的高度也移除到其左下angular),如下所示:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="300" viewBox="0 -300 200 300"> <rect x="20" y="-40" width="20" height="20" stroke="black" stroke-width="1px"></rect> </svg>
这将从svg
左下angularsvg
,看到http://jsfiddle.net/DUVGz/
是的,一个坐标旋转-90,然后翻译+你的新数字的高度应该这样做。 W3C有一个例子。
我发现转换成笛卡儿坐标系的最好的组合是:
CSS
svg.cartesian { display:flex; } svg.cartesian > g { transform: scaleY(-1); } svg.cartesian > g text { transform: scaleY(-1); }
<html> <head></head> <body> <svg class="cartesian" viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet"> <g> <path d="M0 -100 V 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" /> <path d="M-100 0 H 200" stroke="green" stroke-width="0.5" stroke-opacity="0.5" /> <g transform="translate(20, 20)"> <circle r="1" /> <text>(20, 20)</text> </g> <g transform="translate(-50, -35)"> <circle r="0.5" /> <text>(-50, -35)</text> </g> </g> </svg> </body> </html>
<g transform="translate(0,400) scale(1,-1)">
这也相当于下面
<g transform="scale(1,-1) translate(0,-400) ">
如果您不知道svg的大小,则可以对整个SVG元素使用CSS转换:
#parrot { transform-origin: 50% 50%; /* center of rotation is set to the center of the element */ transform: scale(1,-1); }
积分: https : //sarasoueidan.com/blog/svg-transformations/#transforming-svgs-with-css
另一种方法是使用D3 v4 scaleLinear创build一个函数来为你做交换。
import * as d3 from "d3"; ... // Set the height to the actual value to where you want to shift the coords. // Most likely based on the size of the element it is contained within let height = 1; let y = d3.scaleLinear() .domain([0,1]) .range([height,0]); console.log("0 = " + y(0)); // = 1 console.log("0.5 = " + y(0.5)); // = 0.5 console.log("1 = " + y(1)); // = 0 console.log("100 = " + y(100)); // = -99 console.log("-100 = " + y(-100)); // = 101
通过补药查看可运行的代码
我认为180度旋转元素的最简单方法是旋转180.1度;
变换= “翻译(180.1,0,0)”