最佳答案
简短的问题: 使用 SVG 路径,我们可以画一个圆的99.99% ,并显示出来,但当它是一个圆的99.9999999% ,然后圆不会显示出来。怎么修呢?
下面的 SVG 路径可以绘制一个圆的99.99% : (请在下面尝试,看看您是看到4个弧还是只看到2个弧,但请注意,如果它是 IE,它是用 VML 呈现的,而不是 SVG,但有类似的问题)
var paper = Raphael(0, 0, 300, 800);
// Note that there are supposed to be 4 arcs drawn, but you may see only 1, 2, or 3 arcs depending on which browser you use
paper.path("M 100 100 a 50 50 0 1 0 35 85").attr({stroke: "#080", opacity: 1, "stroke-width" : 6}) // this is about 62.5% of a circle, and it shows on most any browsers
paper.path("M 100 210 a 50 50 0 1 0 0.0001 0").attr({stroke: "#080", opacity: 1, "stroke-width" : 6}) // this one won't show anything if it is IE 8's VML, but will show if it is Chrome or Firefox's SVG. On IE 8, it needs to be 0.01 to show
paper.path("M 100 320 a 50 50 0 1 0 0.0000001 0").attr({stroke: "#080", opacity: 1, "stroke-width" : 6}) // this one won't draw anything at all, unless you change the 0.0000001 to 0.0001 on Chrome or Firefox... Safari will show it though...
paper.path("M 100 430 a 50 50 0 1 0 0 0").attr({stroke: "#080", opacity: 1, "stroke-width" : 6}) // this is 100% of a circle... even Safari won't show it
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
M 100 100 a 50 50 0 1 0 0.00001 0
但是当它是一个圆的99.99999999% ,那么什么都不会显示吗?
M 100 100 a 50 50 0 1 0 0.00000001 0
这对于100% 的圆也是一样的(它仍然是一个弧线,不是吗,只是一个非常完整的弧线)
M 100 100 a 50 50 0 1 0 0 0
这要怎么补救?原因是我使用一个函数来绘制一个弧度的百分比,如果我需要“特殊情况”一个99.9999% 或100% 的弧度来使用圆函数,这将是一种愚蠢的。
同样,上面还有一个测试用例 (如果在 IE8上是 VML,甚至第二个圆圈也不会显示... ... 您必须将其更改为0.01)
更新:
这是因为我在我们的系统中为一个分数绘制了一个弧线,所以3.3分得到一个圆的1/3。0.5得到半个圆9.9得到圆的99% 。但是如果我们的系统中有9.99的分数呢?我是否必须检查它是否接近圆的99.999% ,并相应地使用 arc
函数或 circle
函数?那么9.9987分呢?用哪一个?需要知道什么样的分数会映射到一个“太完整的圆”,并切换到一个圆函数,这是荒谬的,当它是一个圆的“一定99.9%”或9.9987分,然后使用弧函数。