w3c标准图示:
evenodd
nonzero;
要判断一个点是否在图形内,需要从该点作任意方向的一条射线,然后检测射线与图形路径的交点值,假设为x,x初始值为0。
对于evenodd,每相交一次,x+1,最后的结果如果x为奇数则该点在图形内,如果为偶数则在图形外。
对于nonzero,情况则复杂一些,每相交一次,x的值也会变化,不过这个变化和你的射线同路径相交的方向有关。要知道路径本身是一个向量(也就是有方向的线段),你画的射线也有方向,则射线同路径相交的方向一定会有两种方向,从路径左侧相交和右侧相交。你可以任意假设一个方向为正,那么另一个相交方向为负,比如我假设左相交为正,那么右相交则为负。此时,计算x的方法是,正相交+1,负相交-1,看最后x的值,如果为0,则该点在图形外,如果不为0则在图形内。
最后,不要去钻相切的牛角尖,因为射线是任意的,如果有相切,那么换个方向再画。
这是用我自己的方式理解的fill-rule属性。