gpt4 book ai didi

java - 在java中翻转二维组件

转载 作者:行者123 更新时间:2023-11-29 06:07:06 24 4
gpt4 key购买 nike

我正在尝试将二维对象翻转到任何对象。有可能在 Java 中这样做吗?如果他们在不同的象限,我可以改变他们的象限吗?它类似于我们在 Paint 中翻转图像。我试图在 Java 中执行的相同实用程序。我听说过仿射变换,其中它使用了一个叫做 TYPE_FLIP 的位,但我不确定如何使用它。任何小例子都会有很大帮助。注意:我不想翻转图像,而是翻转实际的 2D 对象。以这种方式进行仿射变换。

   import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

public class TestRotate extends JFrame
{
public void paint( Graphics g )
{
super.paintComponents(g);
AffineTransform saveTransform;
int[] HouseX = {100,150,200,150,100,50};
int[] HouseY = {100,100,(int)(100+(40*(Math.sqrt(3))/2)),(int)(100+(40*(Math.sqrt(3)))),(int)(100+(40*(Math.sqrt(3)))),(int)(100+(40*(Math.sqrt(3))/2))};

Graphics2D g2 = ( Graphics2D ) g;
g.setColor( Color.BLACK );
g.drawPolygon(HouseX, HouseY, 6);
saveTransform = g2.getTransform();
AffineTransform transform = new AffineTransform();

transform.scale( 1.0, -1.0 );
g2.setTransform( transform );
g2.setColor( Color.BLUE );
g.drawPolygon(HouseX, HouseY, 6);

transform.rotate( Math.toRadians( 45 ) );
g2.setTransform( transform );
g2.setColor( Color.GREEN );
g.drawPolygon(HouseX, HouseY, 6);
}
public static void main(String args[])
{
TestRotate frame = new TestRotate();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 600, 500 );
frame.setVisible( true );
}}

最佳答案

此代码不提供完整的答案,但旨在让您思考。您应该考虑的是“菱形会去哪里?”。尝试调整变换缩放中使用的数字,看看是否可以解决问题A

Diamond Here Diamond Gone

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;

public class TestRotate
{
public static void main(String args[])
{
JFrame frame = new JFrame("Test Rotate");

JPanel gui = new JPanel(new BorderLayout());

final HousePanel housePanel = new HousePanel();
gui.add(housePanel, BorderLayout.CENTER);

final JCheckBox transform = new JCheckBox("Transform");
transform.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
housePanel.setTransform(transform.isSelected());
housePanel.repaint();
}
});
gui.add(transform, BorderLayout.NORTH);

frame.add( gui );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
gui.setPreferredSize( new Dimension(300, 200) );
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible( true );
}
}

class HousePanel extends JPanel {

public int[] HouseX = {
100,105,110,105,100,95
};

public int[] HouseY = {
100,
100,
(int)(100+(5*(Math.sqrt(3))/2)),
(int)(100+(5*(Math.sqrt(3)))),
(int)(100+(5*(Math.sqrt(3)))),
(int)(100+(5*(Math.sqrt(3))/2))
};

boolean transform = false;

public void setTransform(boolean transform) {
this.transform = transform;
}

public void paintComponent( Graphics g )
{
final Graphics2D g2 = (Graphics2D) g;
g2.clearRect( 0, 0, this.getWidth(), this.getHeight() );
g2.setColor( Color.BLACK );

if (transform) {
AffineTransform transform = new AffineTransform();

transform.scale( -1.0, 1.0 );
g2.setTransform( transform );
}
g2.drawPolygon(HouseX, HouseY, 6);
}

}

A) OK.. 基本问题是,对于您正在执行的转换类型,通常需要结合缩放 和翻译。

原因是这样的。

  1. 当形状水平翻转时,它会被绘制到组件可视(可见)区域的左侧。
  2. 当垂直翻转形状时,它会绘制在可视区域的上方

使用比例完成“翻转”翻译后,concatenate() translate()变换以将形状移回可视区域。

如果您知道如何操作,这些组合转换很容易。我不知道怎么办。

关于java - 在java中翻转二维组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com