2016-08-04 58 views
1

我有下面的代码,其中包含使用(路径)和一个圆圈绘制的三角形。我想在所有四个轴上放置三角形45度。我不知道如何在数学上做到这一点。圆的半径可能会有所不同。那么如何将三角形分别放置在四个位置上,如下图所示?(三角形应该是圆圈内的单个像素)。在SVG中放置一定角度的路径

.st0{fill:#F24343;}
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
 
\t style="enable-background:new 0 0 22 14;" xml:space="preserve"> 
 
<style type="text/css"> 
 
\t .st0{fill:#F24343;} 
 
</style> 
 
    <circle cx="40" cy="40" r="20" fill="green"/> 
 
<path class="st0" d="M22,0H0l9.4,12.8c0.8,1.1,2.4,1.1,3.2,0L22,0z" style="transform: translate(22px,44px) rotate(45deg)"/> 
 
</svg> 
 

 
<circle cx="40" cy="40" r="20" fill="green"/>


Image for reference

回答

1

您可以用CSS工作变换或SVG变换属性来实现这一目标。

您可以通过将圆形和路径放在标记中来旋转路径和圆形,并且可以使用CSS转换来旋转它。

<g class="rotate_me"> 
    <circle cx="40" cy="40" r="20" fill="green"/> 
    <path transform="rotate(5 50 50)" class="st0" d="M22,0H0l9.4,12.8c0.8,1.1,2.4,1.1,3.2,0L22,0z" style="transform: translate(22px,44px) rotate(45deg)"/> 
</g> 

CSS:

.rotate_me { 
    transform: rotate(180deg); 
    transform-origin: 50% 50%; 
} 

您还可以添加类路径,并转换原点,以获得所需的价值发挥。

<path class="rotate_me" d="M 15.1929 28.9648 L 15.1929 11.8555 L 29.1138 20.4102 L 15.1929 28.9648 Z" fill="#74c190"/> 

在IE9中不支持对SVG元素进行CSS转换。您可以尝试路径元素的transform属性。

<path transform="rotate(25 20 10)" d="M 15.1929 28.9648 L 15.1929 11.8555 L 29.1138 20.4102 L 15.1929 28.9648 Z" fill="#74c190"/> 

你可能也想看看:https://css-tricks.com/snippets/css/css-triangle/

您可以参考codepen所有三个样本这个粗糙样本:http://codepen.io/priyanka-herur/pen/yJRYZV

+1

角度值是在'旋转()'函数的第一个参数。你不必做任何数学。 –

+0

明白了@PaulLeBeau谢谢。 :) –

0

您正在制作自己的生活困难通过定义指针三角在一些奇怪的地方远离需要的地方。

如果您将三角形定义在正常的“0”位置,您可以轻松地将它指向您想要的位置(见下文)。

rotate()的第一个值是角度,另外两个坐标是旋转中心。在你的情况下,这是40,40(圆的中心)。

.st0{fill:#F24343;}
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
 
\t style="enable-background:new 0 0 22 14;" xml:space="preserve"> 
 
<style type="text/css"> 
 
\t .st0{fill:#F24343;} 
 
</style> 
 
    <circle cx="40" cy="40" r="20" fill="green"/> 
 
    <path class="st0" d="M28,21 L 52,21, L40,8 Z" transform="rotate(45, 40,40)"/> 
 
</svg>