gpt4 book ai didi

javascript - 在 Canvas 中倾斜时计算新宽度

转载 作者:行者123 更新时间:2023-11-28 04:14:00 25 4
gpt4 key购买 nike

我正在为一个项目使用 Canvas ,并且我有一些我正在倾斜的元素。我只是在倾斜 y 值,只想知道倾斜后图像的新宽度是多少(这样我就可以将它与另一个 Canvas 元素对齐)。查看下面的代码以了解我的意思

ctx.save();
//skew the context
ctx.transform(1,0,1.3,0,0,0);
//draw two images with different heights/widths
ctx.drawImage(image,0,0,42,60);
ctx.drawImage(image,0,0,32,25);

目标是知道 42 x 60 图像现在是 X x 60 图像,因此我可以在 0,0 绘制之前进行一些转换。单独测量每个图像很容易,但我在整个项目中有不同的倾斜值和高度/宽度需要对齐。目前我使用这段代码(适用于宽度在 25 到 42 之间的图像):

var skewModifier = imageWidth*(8/6)+(19/3);
var skewAmount = 1.3; //this is dynamic in my app
var width = (skewModifier*skewAmount)+imageWidth;

随着图像变宽,尽管这个公式很快就会分崩离析(我认为这是一个倾斜的公式,而不是像这个那样的直线值)。关于 Canvas 对偏斜的作用有什么想法吗?

最佳答案

您应该能够从数学上推导出它。我相信:

Math.atan(skewAmount) 是某物相对于原点倾斜的 Angular (以弧度为单位)。

所以 1.3 会使对象倾斜 0.915 弧度或 52 度。

所以这是一个红色未倾斜的对象,旁边是同一个倾斜的对象(涂成绿色)。所以你有一个直 Angular 三 Angular 形:

enter image description here

我们知道原点 Angular (0.915 弧度) 并且我们知道相邻边的长度,对于您的两个图像,相邻边长分别为 60 和 25。 (红色的高度)。

斜边是倾斜的长边。

对面是三 Angular 形底部 - 它倾斜了多少!

如果我记得的话,切线让我们相对/相邻,所以对于第一个:

tan(0.915) = opposite/60,求解 JavaScript 代码中的相反数:

相反 = Math.tan(0.915)*60

因此,倾斜对象的底部开始距离原点约 77 像素。让我们在 Canvas 上检查我们的工作:

http://jsfiddle.net/LBzUt/

我觉得不错!

所讨论的三 Angular 形当然是 Canvas 原点,我画的那个黑点,以及红色矩形的左下角,这是我们在倾斜之前要搜索的原始位置。

这个解释有点随意。有什么问题吗?

关于javascript - 在 Canvas 中倾斜时计算新宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281320/

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