我不是很担心如何解释三角形的绘制,但是我一直在试图找到如何仅知道三角形的边和中心来找到三角形的索引。

一些示例三角形输入:

Side 1: 20
Side 2: 30
Side 3: 40
about x=100, y=400

Side 1: 20
Side 2: 40
Side 3: 50
about x=300, y=400


我自己和其他几个人在过去的4个小时里一直在动脑筋,无济于事,因此,任何提示都将不胜感激。

最佳答案

您首先需要弄清楚每个角的位置。由于每边的长度都可以使用the law of cosines ...



...获得侧面1(a)和侧面2(b)之间的角度:



三角形角的位置是:


a)[0,0]
b)[b,0]
c)[c * cos(角度),c * sin(角度)]


之后,您有一个错误位置的三角形,因为您希望将其绘制在三角形的中心。计算三角形的中心可以在different ways中完成,但这是一个非常简单的示例:

centerX = (a.x + b.x + c.x) / 3
centerY = (a.y + b.y + c.y) / 3


然后,您可以将这一点转换为您选择的点!



这是一些您想要执行的代码:

static class Triangle {
    double a, b, c;

    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public double aAngle() {
        return Math.acos(-(Math.pow(a, 2) - Math.pow(b, 2) - Math.pow(c, 2)) / (2 * b * c));
    }

    public Point[] triangle() {

        double angle = aAngle();

        Point[] p = new Point[3];

        p[0] = new Point(0, 0);
        p[1] = new Point((int) b, 0);
        p[2] = new Point((int) (Math.cos(angle) * c), (int) (Math.sin(angle) * c));

        Point center = new Point((p[0].x + p[1].x + p[2].x) / 3,
                                 (p[0].y + p[1].y + p[2].y) / 3);

        for (Point a : p)
            a.translate(-center.x, -center.y);

        return p;
    }
}


用法示例:

public static void main(String[] args) {

    final Triangle t = new Triangle(20, 30, 40);
    final Point translation = new Point(100, 400);

    JFrame frame = new JFrame("Test");

    frame.add(new JComponent() {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            Point[] p = t.triangle();

            g.translate(translation.x, translation.y);

            for (int i = 0; i < p.length; i++)
                g.drawLine(p[i].x,
                           p[i].y,
                           p[(i+1) % p.length].x,
                           p[(i+1) % p.length].y);
        }
    });

    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

}

关于java - 我需要从Incenter和其他方面在Java中绘制一个三角形,想法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12757547/

10-11 22:12
查看更多