模拟棒的逻辑产生方形而不是圆形

时间:2012-10-12 00:37:51

标签: java algorithm

我正试图在移动平台上模拟模拟棒。

我计算了一个基于手指位置的棒矢量,棒的半径返回-1到1的值。

public void calcStickVector(float x, float y)
{
    float cx = getCenterX();
    float cy = getCenterY();

    float distX = x - cx;
    float distY = y - cy;
    distX /= getRadius();
    distY /= getRadius();

    distX = JMath.clamp(-1.0f, 1.0f, distX);
    distY = JMath.clamp(-1.0f, 1.0f, distY);
    stickVector.x = distX;
    stickVector.y = distY;
}

public RectF getInnerStickRect()
{
    float r = getInnerRadius();
    float cx = getCenterX() + (getRadius() * getStickVector().x);
    float cy = getCenterY() + (getRadius() * getStickVector().y);

    innerStickRect.left = cx - r;
    innerStickRect.top = cy - r;
    innerStickRect.right = cx + r;
    innerStickRect.bottom = cy + r;

    return innerStickRect;
}

它几乎可以工作,但在视觉上,内部的棍子,当移动时似乎形成一个正方形,而不是围成一圈。我的逻辑有问题吗?

由于

1 个答案:

答案 0 :(得分:1)

实际上,你真的正在制作一个带有1个角落的盒子。您需要对矢量进行标准化(将x和y除以距离),而不是除以半径和钳位。

double dist = Math.sqrt(distX*distX) + (distY*distY));
distX /= dist;
distY /= dist;