在一个圆圈内获得三角形侧面坐标

时间:2013-06-08 09:18:00

标签: java geometry

如果我知道30°和半径,我想在每个度数'a'的三角形上得到x和ycoördinates。我也想用更多的角落。

这是图片: https://dl.dropboxusercontent.com/u/104060836/Image.png

任何帮助都会受到赞赏。

我已经尝试过这段代码:

/**
 * Gets the points on the shape around the location.
 * @param location
 * @param diameter
 * @param amount
 * @param degreesBetweenPoint
 * @return points
 */
public static List<Location> getShapeLinePoints(Location location, NecroPlane plane, double diameter, int amount, int degreesBetweenPoint) {
    List<Location> points = new ArrayList<Location>();

    double r = diameter / 2;

    int c1 = 180 / amount;
    int c2 = c1 / 2;

    for (int i = 0; i < (360 / degreesBetweenPoint); i++) {
        int d = i * degreesBetweenPoint;

        int d1 = d;
        while (d1 >= c1) {
            d1 -= c1;
        }

        int d2 = 180 - c2 - d1;

        double z = (r * Math.sin(Math.toRadians(c2))) / Math.sin(Math.toRadians(d2));
        double x = Math.sin(Math.toRadians(d)) * z;
        double y = Math.cos(Math.toRadians(d)) * z;

        switch (plane) {
            case XZ:
                points.add(new Location(location.getWorld(), location.getX() + x, location.getY(), location.getZ() + y));
                break;
            case YZ:
                points.add(new Location(location.getWorld(), location.getX(), location.getY() + y, location.getZ() + x));
                break;
            case XY:
            default:
                points.add(new Location(location.getWorld(), location.getX() + x, location.getY() + y, location.getZ()));
        }
    }

    return points;
}

我得到了它的工作,如果有人需要它,这里是解决方案: http://pastie.org/8022687

1 个答案:

答案 0 :(得分:0)

对于象限I.,很容易: 使用此(ASA)规则计算“z”的长度: http://www.mathsisfun.com/algebra/trig-solving-asa-triangles.html

现在你有z,取三边形x,y和z。你知道角度a),你知道90°角,所以你可以计算所有三个角度。现在使用与上面相同的规则,您可以计算x和y的长度,这将是您的x和y坐标。

因此,对于象限IV,使用类似的规则。

由于您的完整三角形是等边的,因此三角形与x的交点为-r / 2。 三面中任何一面的长度为:(3r)/ sqrt(3)。

我不是一个数学家,所以我希望有人可以从这里用II来帮助你。和III。象限中。