三角坐标几何

时间:2012-11-24 16:34:41

标签: java android geometry

我有一个刻在圆圈中的三角形ABC。 B点位于圆的中心,A和C是圆上的两个点。

circle with inscribed triangle

鉴于

给定AB(长度)

给出A和B的坐标

给定角度B(角度ABC)

所需

查找C的坐标

我所知道的

AB = BC,两者都是半径

我使用的是

我正在为Android制作基本的3D java游戏。这将用于向左和向右看,因此如果您单击屏幕的右侧部分,对象将通过向角度B添加一度来移动您。

我尝试找到C

的坐标的代码
rect.get(index)[5] = (int) ((di * Math.cos(Math.toRadians(angle-90)))+.5);
rect.get(index)[6] = (int) ((di * Math.sin(Math.toRadians(angle-90)))+.5);
rect.get(index)[5] = shapes x coord 
rect.get(index)[6] = shapes y coord 

di = radius length 
angle = angle B

我添加了.5,这样当coord被截断时,它会被舍入。

我的完整代码

    double di = distance(playerx, playery, rect.get(index)[5], rect.get(index)[6]);
    double side1 = di;
    System.out.println("Side1: "+ side1);
    double side2 = side1;
    System.out.println("Side2: "+ side2);
    double side3 = distance(rect.get(index)[5], rect.get(index)[6], playerx, playery+di);
    System.out.println("Side3: "+ side3);

    double angle = ((side1*side1)+(side2*side2)-(side3*side3));
    angle = angle/(2*side1*side2);
    angle = Math.acos(angle)*(180/Math.PI);
    System.out.println("Angle: "+angle);
    if(playerx > rect.get(index)[5]){
        if(lookdirection.equals("left")){
            angle += 5;
        }
        if(lookdirection.equals("right")){
            angle -= 5;
        }
    }
    else{
        if(lookdirection.equals("left")){
            angle -= 5;
        }
        if(lookdirection.equals("right")){
            angle += 5;
        }
    }
    System.out.println("Angle: "+angle);

    rect.get(index)[5] = -(di * Math.cos(Math.toRadians(angle-90)));
    rect.get(index)[6] = -(di * Math.sin(Math.toRadians(angle-90)));

    di = distance(playerx, playery, rect.get(index)[5], rect.get(index)[6]);
    side1 = di;
    System.out.println("Side1: "+ side1);
    side2 = side1;
    System.out.println("Side2: "+ side2);
    side3 = distance(rect.get(index)[5], rect.get(index)[6], playerx, playery+di);
    System.out.println("Side3: "+ side3);
    angle = ((side1*side1)+(side2*side2)-(side3*side3));
    angle = angle/(2*side1*side2);
    angle = Math.acos(angle)*(180/Math.PI);
    System.out.println("Angle: "+angle);

    repaint();
}

角度现在正在工作,但X和Y坐标 但

    rect.get(index)[5] = -(di * Math.cos(Math.toRadians(angle-90)));
rect.get(index)[6] = -(di * Math.sin(Math.toRadians(angle-90)));

获得非常大/小的值。他们应该与B点保持“距离”。

1 个答案:

答案 0 :(得分:0)

<强>已更新

这似乎是一个几何问题! 我还没有测试过你的代码,但我想你想要的是

rect.get(index)[6] = (int) ((di * Math.sin(Math.toRadians(angle-90)))+.5);

rect.get(index)[6] = (int) (-(di * Math.sin(Math.toRadians(angle-90)))+.5);

尝试可视化您正在做的事情并检查对称性,移位和周期性here下的身份。图像正在转动并沿着x轴反射你正在做的事情。您还必须处理舍入问题。如果坐标接近0,则图像可能不会移动。

我的建议是将你的坐标保持为双倍,并且只有当你要将它们渲染成像素而不覆盖它们的值时才将它们围绕它们