gpt4 book ai didi

java - 我需要用 Java 从内心和侧面画一个三角形,想法?

转载 作者:行者123 更新时间:2023-11-29 05:54:20 26 4
gpt4 key购买 nike

我不太担心如何解释如何绘制三角形,但我一直在努力寻找如何仅知道三角形的边和中心来找到三角形的索引。

一些示例三角形输入:

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 ...

law of cosines

...获取边 1 (a)边 2 (b) 之间的角度:

angle

三角形角的位置是:

  • 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 - 我需要用 Java 从内心和侧面画一个三角形,想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12757547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com