Hello John
,
This
piece of code should do the work.
/**
*Draw a diamond ending at the end vertex .The startvertex is necessary to
*determine the orientation in space
*diagnolLength ==2*medianLength and arrowBaselength==diagnolLength..
*
*/
public static void drawDiamond(Point endVertex ,double alongDiagnolLength,double perpendicularDiagnolLength,
Point startVertex,Graphics2D g2,boolean fill){
double medianLength=alongDiagnolLength/2;
double arrowBaseLength=perpendicularDiagnolLength;
*Draw a diamond ending at the end vertex .The startvertex is necessary to
*determine the orientation in space
*diagnolLength ==2*medianLength and arrowBaselength==diagnolLength..
*
*/
public static void drawDiamond(Point endVertex ,double alongDiagnolLength,double perpendicularDiagnolLength,
Point startVertex,Graphics2D g2,boolean fill){
double medianLength=alongDiagnolLength/2;
double arrowBaseLength=perpendicularDiagnolLength;
Point t1=new Point(0,0);//the end points of
the base of the triangle....
Point t2=new Point(0,0);
Point t3=new Point(0,0);
Point t2=new Point(0,0);
Point t3=new Point(0,0);
double
b=arrowBaseLength/2;//base/2
double d=getDistance(endVertex ,startVertex);
double ratio=medianLength/d;
double ratio1=2*ratio;
double x=endVertex.getX()+ratio*(startVertex.getX()-endVertex.getX());
double y=endVertex.getY()+ratio*(startVertex.getY()-endVertex.getY());
int mx=(int) (2*x-endVertex.getX());
int my=(int) (2*y-endVertex.getY());
t3.setLocation(mx,my);
int diff= (int) (endVertex.getX()-startVertex.getX());
if(Math.abs(diff)==0){
t1.setLocation((int) (x-b),y);
t2.setLocation((int) (x+b),y);
int[] xs={(int) endVertex.getX(),(int) t1.getX(), mx,(int) t2.getX()};
int[] ys={(int) endVertex.getY(),(int) t1.getY(), my,(int) t2.getY()};
if(fill){
g2.fillPolygon(xs,ys,4);
}
else{
g2.drawPolygon(xs,ys,4);
}
return;
}else{
double x1,y1,x2,y2;
double m=getSlope( new Line2D.Double(endVertex.getX(),endVertex.getY(),startVertex.getX(),startVertex.getY()) );
double denom=Math.sqrt(1+m*m);
y1=b/denom;x1=-m*y1;y2=-y1;x2=-x1;
t1.setLocation(x+x1,y+y1);
t2.setLocation(x+x2,y+y2);
int[] xs={(int) endVertex.getX(),(int) t1.getX(), mx, (int) t2.getX()};
int[] ys={(int) endVertex.getY(),(int) t1.getY(), my, (int) t2.getY()};
if(fill){
g2.fillPolygon(xs,ys,4);
}
else{
g2.drawPolygon(xs,ys,4);
}
return;
}
}
double d=getDistance(endVertex ,startVertex);
double ratio=medianLength/d;
double ratio1=2*ratio;
double x=endVertex.getX()+ratio*(startVertex.getX()-endVertex.getX());
double y=endVertex.getY()+ratio*(startVertex.getY()-endVertex.getY());
int mx=(int) (2*x-endVertex.getX());
int my=(int) (2*y-endVertex.getY());
t3.setLocation(mx,my);
int diff= (int) (endVertex.getX()-startVertex.getX());
if(Math.abs(diff)==0){
t1.setLocation((int) (x-b),y);
t2.setLocation((int) (x+b),y);
int[] xs={(int) endVertex.getX(),(int) t1.getX(), mx,(int) t2.getX()};
int[] ys={(int) endVertex.getY(),(int) t1.getY(), my,(int) t2.getY()};
if(fill){
g2.fillPolygon(xs,ys,4);
}
else{
g2.drawPolygon(xs,ys,4);
}
return;
}else{
double x1,y1,x2,y2;
double m=getSlope( new Line2D.Double(endVertex.getX(),endVertex.getY(),startVertex.getX(),startVertex.getY()) );
double denom=Math.sqrt(1+m*m);
y1=b/denom;x1=-m*y1;y2=-y1;x2=-x1;
t1.setLocation(x+x1,y+y1);
t2.setLocation(x+x2,y+y2);
int[] xs={(int) endVertex.getX(),(int) t1.getX(), mx, (int) t2.getX()};
int[] ys={(int) endVertex.getY(),(int) t1.getY(), my, (int) t2.getY()};
if(fill){
g2.fillPolygon(xs,ys,4);
}
else{
g2.drawPolygon(xs,ys,4);
}
return;
}
}
Rajagopalan N
Senior Software Engineer
Yasu Technologies
pvt Ltd
http://www.yasutech.com
