gpt4 book ai didi

javascript - 计算 Canvas 渐变的旋转

转载 作者:搜寻专家 更新时间:2023-10-31 23:22:53 26 4
gpt4 key购买 nike

我正在尝试使用渐变来填充 Canvas 的某个区域,但我希望能够设置渐变的 Angular 。

我知道这可以通过在创建渐变 (ctx.createLinearGradient(x1, y1, x2, y2)) 时使用不同的值来实现,如下所示:

Gradient creation graphic

但我似乎无法理解将 Angular (弧度)转换为将产生相同 Angular 渐变大小所需的数学(我指的 Angular 垂直于渐变的方向,因此 0 弧度 Angular 将在右侧显示渐变)

简而言之,如何将(数量)弧度转换为 X 乘 Y 形状?

$(document).ready(function(){
var canvas = document.getElementById("test");
var ctx = canvas.getContext("2d");
var angle = 0.5;

ctx.beginPath();
ctx.moveTo(100, 100);
ctx.arc(100, 100, 100, 0, -angle, true);
ctx.lineTo(100, 100);
ctx.closePath();

// Convert angle into coordinates to tilt the grad
// grad should be perpendicular to the top edge of the arc
var grad = ctx.createLinearGradient(0, 0, 0, 100);

grad.addColorStop(0, "rgba(0,0,0,0)");
grad.addColorStop(1, "rgba(0,0,0,0.8)");
ctx.fillStyle = grad;
ctx.fill();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<canvas id="test" width="500" height="500"></canvas>

(所以没有人会浪费他们的时间:我特别不想在这种情况下使用 context.rotate())

最佳答案

您可以使用带有 cos 和 sin 的 Angular 来定义提供梯度的线。剩下的唯一事情就是给出长度:

var length = 100, angle = 0;
ctx.createLinearGradient(x, y, x + Math.cos(angle) * length, y + Math.sin(angle) * length);

渐变将沿着(垂直)给定的线呈现。

未说明,但如果您需要根据 Angular 和框计算线的长度,您可以使用 law of sines这样做(用于 this way )。下面的示例使用固定半径。您还可以通过计算斜边使用 (x1, x2) 的最大长度:length = Math.sqrt(diffX*diffX + diffY*diffY);

例子

var ctx = c.getContext("2d"),
x1 = 150, y1 = 150, x2, y2, angle,
length = 150;

render();
cAngle.oninput = render;

function render() {

angle = +cAngle.value / 180 * Math.PI;

// calculate gradient line based on angle
x2 = x1 + Math.cos(angle) * length;
y2 = y1 + Math.sin(angle) * length;

// create and render gradient
ctx.fillStyle = ctx.createLinearGradient(x1, y1, x2, y2);
ctx.fillStyle.addColorStop(0, "#fff");
ctx.fillStyle.addColorStop(1, "#07f");
ctx.fillRect(0, 0, 300, 300);

// show definition line
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
}
<label>Angle: <input id=cAngle max=359 type=range value=0></label><br>
<canvas id=c height=300></canvas>

关于javascript - 计算 Canvas 渐变的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com