0
我用一個現有的例子來解釋這個問題。
基本上是畫一條線。
用於繪製直線的X,Y
值用於計算斜率。
該值隨後與文本值一起使用。
最終目標是使文本"ABC"
與該線的斜率相匹配。旋轉文字以匹配一條線的斜率
每當線條的X,Y
值(pt1x, pt1y, pt2x, pt2y
)發生變化時,應計算線條的斜率,以使文本更改爲與斜率相匹配。
此示例顯示文本旋轉太多。使用一般斜率計算:((pt2y - pt1y)/(pt2x - pt1x))
。
我想知道如果從斜坡轉換爲旋轉是不一樣的。
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.AffineTransformOp;
import javax.swing.*;
public class BevelArrows
{
public static void main (String...args)
{
SwingUtilities.invokeLater (new Runnable() {
BevelArrows arrows = new BevelArrows();
@Override
public void run() {
JFrame frame = new JFrame ("Test");
frame.add (new JPanel() {
public void paintComponent (Graphics g) {
arrows.draw ((Graphics2D) g, getWidth(), getHeight());
}
}
, BorderLayout.CENTER);
frame.setSize (800, 400);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setVisible (true);
}
});
}
void draw (Graphics2D g, int width, int height)
{
g.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor (Color.WHITE);
g.fillRect (0, 0, width, height);
g.setColor (Color.BLUE);
int pt1x = 150;
int pt1y = 10;
int pt2x = 200;
int pt2y = 200;
g.drawLine (pt1x, pt1y, pt2x, pt2y);
g.setStroke (new BasicStroke (20.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
Font font = new Font(null, Font.PLAIN, 10);
AffineTransform affineTransform = new AffineTransform();
affineTransform.rotate((float)((pt2y - pt1y)/(pt2x - pt1x)), 0, 0);
Font rotatedFont = font.deriveFont(affineTransform);
g.setFont(rotatedFont);
g.drawString("abc", 250, 25);
g.dispose();
}
}