坐标计算:如何将旋转的HTML主体上的对象分别转换为0度旋转主体
更新 - 已解决
我使用这篇文章中的公式解决了这个问题计算旋转的 HTML 元素的原点
原问题
这个问题是我之前的问题的延续:
How to translate Mouse X,Y Coordinates to move HTML element inside a container, where container is rotation to some angle
这是一些背景知识,如果您没有阅读上一个链接:
我正在用 HTML/JS 制作一个纸牌游戏,为所有玩家显示实时视角。
对于 4 人桌,桌子以 0、90、180 和 270 度角旋转。
对于 6 人桌,桌子旋转成 6 面,分别为 0 度、60 度、120 度和 300 度。
上面的桌子和卡片的结构是这样的:
<gameTable style=”position: relative;”>
<card style=”position: absolute; top: 1%, left: 1%;”></card>
</gameTable>
卡片是绝对位置,因此所有屏幕尺寸的移动都是一致的。
现在我正在制作一个功能,允许我在桌子上存储卡片设置并将它们保存为对象。我计算它们与当前玩家的偏移量并存储它们。
偏移意味着:
if Player = 0 degree, offsetY = 100 - card.top and OffsetX = 100 - card.left
类似地,我使用公式(蛮力方法)来存储 4 个玩家表中其他 3 个玩家的偏移量。
if Player = 180 degree, offsetY = card.top and OffsetX = card.left
if Player = 90 degree, offsetY = card.left and OffsetX = 100 - card.top
if Player = 270 degree, offsetY = 100 - card.left and OffsetX = card.top
我交换值以存储正确的偏移量,然后每当我想再次显示它们时,我都会使用相同的公式将它们显示在正确的位置,无论 4 个玩家中的哪一个调用它。
基本上,目标是存储正确的偏移量,无论我从哪个角度侧存储它,然后正确显示,无论我在哪个角度表侧使用它。
示例:在提取对象后定位卡片。
if player is 90 degree, card.left = offsetY and card.top = 100 - offsetX
现在这非常适用于所有玩家相互正交的 4 人桌。
但是,当涉及到 6 人桌时,每个人之间的夹角为 60 度,我还无法解决。
我尝试了几件事,但还没有让我到任何地方。这是最接近的:
let cosTheta = Math.cos((Math.PI / 180) * (tableRotationInDegrees));
let cosTheta = Math.sin((Math.PI / 180) * (tableRotationInDegrees));
card.style.left = `${offsetX * cosTheta}%`;
card.style.top = `${offsetY * sinTheta}%`;
我认为以下链接可能包含我正在寻找的答案,但我不太了解,因为不幸的是我数学不太好。
https://math.stackexchange.com/questions/51111/calculating-point-on-a-circle-given-an-offset
这里附上图片供参考。