这完全是关于数学的。遗憾的是,我忘了那些我在学习中学到的东西。
好的,我正试图在Javascript中以一定角度旋转(使用画布)后得到图像尺寸。
答案 0 :(得分:8)
由于我在这里没有MSPaint以外的任何工具,我会重新使用你的图像:
假设原始矩形的大小为R(ectangle)W(宽度)* RH(八),
在这种情况下RW=200
,RH=80
;
旋转一定角度A后,逆时针旋转
其中0deg <= A <= 90deg
以度为单位(或0 <= A <= Math.PI/2
以弧度表示),
在这种情况下A=30deg
或A=Math.PI/6
,
在新的“外部”矩形中,每一面被两部分分开(为了便于描述;对应于图像)。
在左侧,假设上部(紫色)部分称为N(ew)H(八)U(p),下部(红色) )部分称为NHL(ow);
底部的规则相同,我们有NW(宽)L(eft)(蓝色)和NWR(ight)(橙色)。
因此新矩形的大小(区域)为(NHU + NHL) * (NWL + NWR)
根据sin
和cos
的定义:
NWL = RW * Math.cos(A); //where A is in radians
NHL = RW * Math.sin(A);
NHU = RH * Math.cos(A);
NWR = RH * Math.sin(A);
(如果您在度数中使用A
,请将A
替换为Math.PI*A/180
。)
因此新的“外部”宽度为NWL + NWR
,新的“外部”高度为NHU + NHL
,现在您可以计算所有内容。
答案 1 :(得分:0)
这是一个实现@Passerby的解决方案以及其他一些保护措施的嵌入式函数:
const d =
{userName:[],email:[],name:{fullName:[],split:{first:[],last:[]}},date:{input:{split:{month:[],year:[]},full:[]},select:{month:[],year:[]}}}
const lookup = (o = {}, s = "") =>
s
.split(".")
.reduce
( (r, x) =>
r == null ? undefined : r[x]
, o
)
console.log(lookup(d, "name.split"))
// { first: [], last: [] }
console.log(lookup(d, "name.split.first"))
// []
console.log(lookup(d, "name.split.zzz"))
// undefined
console.log(lookup(d, "zzz"))
// undefined