将 skewX 和 skewY 转换为倾斜角度和倾斜长度

问题描述 投票:0回答:1

我正在解析变换 skewX 和 skewY 以输出倾斜角度和倾斜长度 - 均以度为单位。

我有的是这个:

const handleSkew = ({
  skewX,
  skewY,
}: Readonly<{ skewX: number, skewY: number }>) => {

  const angle = rad2Deg(Math.atan2(skewY, skewX))
  let length = rad2Deg(Math.sqrt(Math.pow(skewX, 2) + Math.pow(skewY, 2)))

  if (skewX > 0 || skewY < 0) {
    length = -length
  }

  return { length, angle }
}

const rad2Deg = (rad: number) => {
  return (rad * 180.0) / Math.PI
}

这给了我正确的方向和倾斜角度,但长度略有偏差。有人能告诉我我在这里做错了什么吗? 😇

javascript geometry transform skew
1个回答
0
投票

长度不是以度为单位测量的,因此请删除 sqrt() 调用周围的 rad2Deg() 。

此外,方向是由角度而不是长度表示的,因此您不应该有条件地否定长度。

const handleSkew = ({
  skewX,
  skewY,
}: Readonly<{ skewX: number, skewY: number }>) => {

  const angle = rad2Deg(Math.atan2(skewY, skewX))
  let length = Math.sqrt(Math.pow(skewX, 2) + Math.pow(skewY, 2))

  return { length, angle }
}

const rad2Deg = (rad: number) => {
  return (rad * 180.0) / Math.PI
}
© www.soinside.com 2019 - 2024. All rights reserved.