[0,0]が左上ではなく左下になるようにSVG座標系を反転する方法はありますか?
私は多くの実験を行いましたが、唯一の論理的な方法は次のとおりです。
<g transform="translate(0,400)">
<g transform="scale(1,-1)">
400は画像の高さです。これにより、すべてが下に移動し、画像の上部が画像の下部になり、スケール操作によりY座標が反転し、ページ/画像から外れたビットが反転して塗りつぶされます残されたスペース。
デカルト座標系に変換するために私が見つけたすべてのコンボのベストは、非常に簡単です:
css
_svg.cartesian {
display:flex;
}
/* Flip the vertical axis in <g> to emulate cartesian. */
svg.cartesian > g {
transform: scaleY(-1);
}
/* Re-flip all <text> element descendants to their original side up. */
svg.cartesian > g text {
transform: scaleY(-1);
}
_
_<html>
<head></head>
<body>
<svg class="cartesian" viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet">
<g>
<!-- SVG Start -->
<!-- Vertical / Horizontal Axis: Can be removed if you don't want x/y axes. -->
<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" />
<!-- Plotting: This is an example plotting two points at (20, 20) and (-50, -35), replace it with your data. -->
<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>
<!-- SVG End -->
</g>
</svg>
</body>
</html>
_
これにより、css scaleY(-1)
。を介してページ上のすべてのテキスト要素が自動的にアンフリップされます
私はこれが古いことを知っていますが、私は同じことをしていて、@ Nippysaurusバージョンを試しましたが、すべてが回転するのでこれは面倒です(画像を置く場合は、それらを元に戻す必要があります)。しかし、別の解決策があります
私がしたことは、単純にsvg
のviewBoxを移動し、y軸上のすべての座標を反転することです(そして、オブジェクトの高さも削除して、左下隅になります)。
<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>
これにより、rect
の左下隅から20,20にsvg
が配置されます。 http://jsfiddle.net/DUVGz/ を参照してください
はい、-90の座標回転とそれに続く新しいフィギュアの高さの平行移動が必要です。 W3C に例があります。
<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