我并不担心如何解释如何绘制三角形,但我一直试图找到如何找到三角形的指数只知道边和三角形的香。
一些示例三角形输入:
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个小时里一直绞尽脑汁无济于事,所以任何提示都会受到高度赞赏。
答案 0 :(得分:3)
首先需要弄清楚的是每个角落的位置。由于你有每边的长度,你可以使用the law of cosines ...
...获取侧1(a)和侧2(b)之间的角度:
三角形角的位置是:
在此之后,您有一个三角形来自错误的位置,因为您希望它们在三角形的中心绘制。计算三角形的中心可以在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);
}
答案 1 :(得分:0)
你可以在没有任何三角函数的情况下完成它!
考虑 b 和 c 边缘的水平和垂直分量(让 a 为水平)。根据定义:
b x 2 + b y 2 = b 2
c x 2 + c y 2 = c 2
但是,由于成为三角形的一部分:
b x + c x = a
b y = c y = height
代:
b x 2 + b y 2
= b x 2 + h 2
= b 2c x 2 + c y 2
=(a - b x ) 2 + h 2
=(a 2 - 2ab x )+(b x 2 + h 2 )
=(a 2 - 2ab x )+ b 2
= c 2
现在我们可以找到b x :
b x =(a 2 + b 2 - c 2 )/ 2a
使用我们的第一个等式:
b y = sqrt(1 - b x 2 )
在代码中:
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 Point[] coords() {
Point[] p = new Point[3];
double bx = (a*a + b*b - c*c) / (2*a);
p[0] = new Point(0, 0);
p[1] = new Point(a, 0);
p[2] = new Point(bx, Math.sqrt(b*b - bx*bx));
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;
}
}