Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何旋转线性渐变?_Javascript_Html_Canvas - Fatal编程技术网

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; 


    }