Javascript 如何旋转线性渐变?
如何使我的白线从底部矩形的一点到另一点完全成对角线Javascript 如何旋转线性渐变?,javascript,html,canvas,Javascript,Html,Canvas,如何使我的白线从底部矩形的一点到另一点完全成对角线 _canvas=document.getElementById('canvas'); _stage=_canvas.getContext('2d'); _stage.fillStyle=“#00FF00”; _stage.fillRect(0,0300200); var梯度=_stage.createLinearGradient(0,200,300,300); 渐变。添加颜色停止(0,“蓝色”); 渐变。添加颜色停止(.5,“白色”); 渐
_canvas=document.getElementById('canvas');
_stage=_canvas.getContext('2d');
_stage.fillStyle=“#00FF00”;
_stage.fillRect(0,0300200);
var梯度=_stage.createLinearGradient(0,200,300,300);
渐变。添加颜色停止(0,“蓝色”);
渐变。添加颜色停止(.5,“白色”);
渐变。添加颜色停止(1,“蓝色”);
_stage.fillStyle=渐变;
_stage.fillRect(0,200,300,300);
通过数学,改变梯度坐标。您需要设置渐变坐标,以便它们描述与其正交的直线
\u canvas=document.getElementById('canvas');
_stage=_canvas.getContext('2d');
_stage.fillStyle=“#00FF00”;
_stage.fillRect(0,0300200);
var半径=100;
变量角度=数学atan2(100300)+数学PI/2;
var gx=半径*数学cos(角度);
var gy=半径*数学sin(角度);
var cx=(0+300)/2;
var-cy=(200+300)/2;
var梯度=_stage.createLinearGradient(cx-gx,cy-gy,cx+gx,cy+gy);
渐变。添加颜色停止(0,“蓝色”);
渐变。添加颜色停止(.5,“白色”);
渐变。添加颜色停止(1,“蓝色”);
_stage.fillStyle=渐变;
_stage.fillRect(0,200,300,300)代码>
这里有一个更通用的解决方案
function createDiagonalGradient(startx, starty, endx, endy)
{
var height = endy - starty;
var radius = height;
//-1 or 1 depending on which diagonal you want
var angle = -1 * Math.atan2(height, endx) + Math.PI / 2;
var gx = radius * Math.cos(angle);
var gy = radius * Math.sin(angle);
var cx = (startx + endx) / 2;
var cy = (starty + endy) / 2;
var gradient = _stage.createLinearGradient(cx - gx, cy - gy, cx + gx, cy + gy);
gradient.addColorStop(0, "black");
gradient.addColorStop(.5, "white");
gradient.addColorStop(1, "black");
return gradient;
}
好的,但是不需要用三角函数。不需要任何数学:createLinearGradient(0,\u canvas.height,\u canvas.width,200)
@markE:你有一个点-交换坐标非常接近旋转90度。不过需要数学来解释原因。@Amadan你能检查一下我的问题吗?我的问题很相似→ 你能看看我的问题吗?我的问题很相似→
function createDiagonalGradient(startx, starty, endx, endy)
{
var height = endy - starty;
var radius = height;
//-1 or 1 depending on which diagonal you want
var angle = -1 * Math.atan2(height, endx) + Math.PI / 2;
var gx = radius * Math.cos(angle);
var gy = radius * Math.sin(angle);
var cx = (startx + endx) / 2;
var cy = (starty + endy) / 2;
var gradient = _stage.createLinearGradient(cx - gx, cy - gy, cx + gx, cy + gy);
gradient.addColorStop(0, "black");
gradient.addColorStop(.5, "white");
gradient.addColorStop(1, "black");
return gradient;
}