SVG 多边形 - <polygon>

定義:用来创建含有不少于三个边的图形。

屬性

屬性名稱 屬性說明
points 每一個座標位置,x1,y1 x2,y2, x3,y3...
transform 多邊形的變形效果,類似 css 中的 transform

fill-rule

有效值:   nonzero | evenodd | inherit
默认值:   nonzero
应用于:   shape形状类元素 和 文字内容类元素
可继承:  
比例:  
媒体:   可见
动画可用:  

fill-rule 

属性用于指定使用哪一种算法去判断画布上的某区域是否属于该图形“内部” (内部区域将被填充)。对一个简单的无交叉的路径,哪块区域是“内部” 是很直观清除的。但是,对一个复杂的路径,比如自相交或者一个子路径包围另一个子路径,“内部”的理解就不那么明确了。

fill-rule 属性提供两种选项用于指定如何判断图形的“内部”:

nonzero

字面意思是“非零”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。下图演示了nonzero规则:

練習30天SVG之基礎開篇polygon標籤(part5)

点击查看示例SVG文件 (仅适用于支持SVG的浏览器)

evenodd

字面意思是“奇偶”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点的数量。如果结果是奇数则认为点在内部,是偶数则认为点在外部。下图演示了evenodd 规则:

練習30天SVG之基礎開篇polygon標籤(part5)

点击查看示例SVG文件 (仅适用于支持SVG的浏览器)

提示: 上述解释未指出当路径片段与射线重合或者相切的时候怎么办,因为任意方向的射线都可以,那么只需要简单的选择另一条没有这种特殊情况的射线即可。

栗子一:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1000px" height="600px">
  <polygon points="200,0 0,200 200,200 400,200 -200,0 0,-200 -200,-200 -400,-200 " style="fill:rgba(255,255,0,0.6);stroke:green;stroke-width:2;transform:translate(400px,300px);" />
</svg>

結果:

練習30天SVG之基礎開篇polygon標籤(part5)

 

栗子二:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600px" height="600px">
  <polygon points="100,10 40,180 190,60 10,60 160,180" style="fill:rgba(255,255,0,.8);stroke:blue;stroke-width:5;fill-rule:nonzero;"/>
</svg>

 結果為:

練習30天SVG之基礎開篇polygon標籤(part5)

 

栗子三:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600px" height="600px">
  <polygon points="100,10 40,180 190,60 10,60 160,180" style="fill:rgba(255,255,0,.8);stroke:blue;stroke-width:5;fill-rule:evenodd;transform:skew(35deg) scale(2)"/>
</svg>

結果:

練習30天SVG之基礎開篇polygon標籤(part5)

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
猜你喜欢
  • 2021-11-28
  • 2021-11-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案