当我知道线坐标时,如何在java中平行于一条线绘制字符串? 下面是我的代码到目前为止,x1,y1和x2,y2代表线的坐标。 (文字必须平行并且在线的中心)
g.drawLine(x1, y1, x2, y2);
AffineTransform at = new AffineTransform();
at.rotate(<WHAT TO PUT HERE>);
g.setTransform(at);
g.drawString("My Text", <WHAT TO PUT HERE> , <WHAT TO PUT HERE>);
答案 0 :(得分:0)
tan(theta)= slope =(y2-y1)/(x2-x1)
theta = atan(坡度)
暗示,use
at.rotate(Math.toRadians(theta))
至于
g.drawString(String str, int x, int y)
x,y是字符串leftmost character的坐标。
答案 1 :(得分:0)
经过一些研究后,
这就是我想出来的
//draw the line
g.drawLine(x1, y1, x2, y2);
//get center of the line
int centerX =x1 + ((x2-x1)/2);
int centerY =y1 + ((y2-y1)/2);
//get the angle in degrees
double deg = Math.toDegrees(Math.atan2(centerY - y2, centerX - x2)+ Math.PI);
//need this in order to flip the text to be more readable within angles 90<deg<270
if ((deg>90)&&(deg<270)){
deg += 180;
}
double angle = Math.toRadians(deg);
String text = "My text";
Font f = new Font("default", Font.BOLD, 12);
FontMetrics fm = g.getFontMetrics(f);
//get the length of the text on screen
int sw = fm.stringWidth(text);
g.setFont(f);
//rotate the text
g.rotate(angle, centerX, centerY);
//draw the text to the center of the line
g.drawString(text, centerX - (sw/2), centerY - 10);
//reverse the rotation
g.rotate(-angle, centerX, centerY);
感谢@rocketboy和@resueman的帮助