Mat*_*tow 34 javascript svg gradient trigonometry css3
Microsoft提供了一个出色的SVG渐变制作器,因此IE9也可以具有"CSS3"渐变(单击自定义).
我目前利用他们的逻辑为我的Fireworks和Dreamweaver扩展将渐变转换为SVG,但我只知道如何为标准的顶部,底部,左,右方向做.如果输入一个角度,我不进行转换,因为我不确定如何将x1,x2,y1,y2转换为CSS3角度.
梯度生成器提供如下值:x1 ="0%"y1 ="0%"x2 ="56.262833675564686%"y2 ="68.29999651227678%"
我对数学或三角学不太满意,所以有人可以帮助我吗?如果可能的话,我也想在Sass mixin中使用相同的数学来做类似的事情.
Moh*_*sen 67
如果从坐标获得deltaX
并返回其参数的商的反正切值.返回值以弧度为单位.deltaY
Math.atan2
var deltaX = x2 - x1;
var deltaY = y2 - y1;
var rad = Math.atan2(deltaY, deltaX); // In radians
Run Code Online (Sandbox Code Playgroud)
然后你可以将它转换为度数就像:
var deg = rad * (180 / Math.PI)
Run Code Online (Sandbox Code Playgroud)
我最初的答案中有一些错误.我相信更新的答案会解决所有错误.如果您认为此处存在问题,请在此处发表评论.
Mat*_*att 19
目前接受的答案不正确.首先,Math.tan
完全错了 - 我怀疑Mohsen的意思Math.atan
,这只是一个错字.
但是,正如对该答案的其他回应所述,您应该真正使用Math.atan2(y,x)
.常规反正切将仅返回-pi/2和pi/2(象限1和4)之间的值,因为输入是不明确的 - 反正切无法知道输入值是否属于象限1对3,或者2比4.
Math.atan2
另一方面,可以使用给定的xy值来确定您所在的象限,并为所有4个象限中的任何坐标返回适当的角度.然后,正如其他人所说(180/Math.pi)
,如果需要,你可以乘以将弧度转换为度数.