我一直在试图找出一段时间,现在我正在制作一个程序,它使用一个三角形作为箭头并试图弄清楚如何制作一个箭头两点,这意味着第一个点将在三角形底部的中点,而第二个点将在朝向远离第一点的方向的尖端处。绘制一个等腰三角形/带有两个点的箭头
这种粗漆图纸应该帮助找出什么我谈论 http://i.stack.imgur.com/f3ktz.png(会直接把图片,但没有足够的代表)
现在,我经历了,并试图找出如何计算那些其他三角形的两个端点,所以我可以制作多边形,但是我没有正确地做,因为我得到的不是等腰三角形,并且端点不会创建垂直于原始线条的直线。
什么我目前得到(对于某些图纸在其上方,显示分) http://i.stack.imgur.com/dljsn.png
我当前的代码
public class Triangle extends Shape{
private boolean assigned = false;
private int[] x;
private int[] y;
public Triangle(Point startPoint, Point endPoint){
this.startPoint = startPoint;
this.endPoint = endPoint;
}
@Override
public void draw(Graphics g) {
g.setColor(Color.white);
if(!assigned) {
x = new int[3];
y = new int[3];
double distance = startPoint.distance(endPoint);
double halfDistance = distance/2;
double angle = getAngle(startPoint,endPoint)- Math.PI/2.0;
x[0] = (int)endPoint.getX();
y[0] = (int)endPoint.getY();
x[1] = (int)((Math.sin(angle)*halfDistance) + startPoint.getX());
y[1] = (int)((Math.cos(angle)*halfDistance) + startPoint.getY());
x[2] = (int)(startPoint.getX() - (Math.sin(angle)*halfDistance));
y[2] = (int)(startPoint.getY() - (Math.cos(angle)*halfDistance));
assigned = true;
if(endPoint.distance(x[1],y[1]) == (Math.sqrt(5)*halfDistance))
System.out.println("DEBUG: Confirm Correct 1");
if(endPoint.distance(x[1],y[1]) == endPoint.distance(x[2],y[2]))
System.out.println("DEBUG: Confirm Correct 2");
}
g.fillPolygon(x,y,3);
g.setColor(Color.blue);
}
private double getAngle(Point pointOne, Point pointTwo){
double angle = Math.atan2(pointTwo.getY()- pointOne.getY(),pointTwo.getX()-pointOne.getX());
while(angle < 0){
angle += (2.0*Math.PI);
}
return angle;
}
}
我在这方面的工作了几个小时,可以似乎没有弄明白,有人请帮忙。
差不多,我在某个时候也得到了这个,但它只能在角度很好的情况下工作,而且会出现一个“怪异”的角度,产生这个http://i.imgur.com/HILpcgr.png – 2015-02-10 00:34:45
好吧,停止放入怪异的角度:P – MadProgrammer 2015-02-10 00:40:04
Lol,k。或者,如果您向下倾斜(负向度为btwn角度),则会产生一些尴尬的三角形 – 2015-02-10 00:40:18