在幸运转轮中找到所选的细分

时间:2018-07-26 07:51:22

标签: c# unity3d

在Unity中,我有一个随时间旋转的圆形精灵。

private void Update()
{
    transform.Rotate(0, 0, 10 * Time.deltaTime);
}

我想从这个圈子中算出 n 件。一些例子:

examples

片段的数量由数组的长度给出

private void SplitCircle(Part[] parts)
{
    // split the circle by the amount of parts
}

我只需要计算一下。我不需要用户界面部分!

每块都将从圆上取(360 / n)度。如果有5件,则第一部分的范围应为0至72。第二部分的范围应为73至144等。

在我的场景中,我有一个按钮可以停止圆的旋转。按下按钮是否可以计算出哪一部分在顶部?

stop

1 个答案:

答案 0 :(得分:2)

将圆旋转值归一化为0到360(旋转%360)。

依次从每个细分受众群范围内的每个数字中减去此数字。对于每一段,找到调整后的范围值的底部在下限处<0,在上限处> = 0的部分。选择那个。

如果选定的段不存在,请将预归一化的旋转值调整90度,直到结果适合您的“向上”为止。

此外,您的范围不应为0..72、73..144等。72.5度怎么办?它应该是72..144,下限为> =,上限为<。

在未经测试的C#ish伪代码中...

var adjust = 0; /* Adjust this +/- 90 if the result comes out with the wrong result */
var spriteRotation = (getSpriteRotationDegrees() + adjust) % 360.0f;
for (var i = 0; i < parts.length; i++) {
    var lowerBound = parts[i].lowerBound() - spriteRotation;
    var upperBound = parts[i].upperBound() - spriteRotation;
    if (lowerBound < 0 && upperBound >= 0) {
        break;
    }
}
var winningPart = parts[i];