前几天我正在参与线程图像/图形到一个形状,并通过Rectangle迭代添加到图像来做一个黑客尝试获取图像的轮廓Area.那很慢.
这个例子改为构建一个GeneralPath并Area从GP 创建.快多了.

左上角的图像是"源图像".右边的两个是处理轮廓的各个阶段.它们都有圆形边缘和三角形倾斜边缘的锯齿状边缘.
我希望获得一种能够消除或减少锯齿状的形状.
1234
1 **
2 **
3 ***
4 ***
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)
角落在:
1234
1 ****
2 ****
3 **
4 **
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)
角落在:
假设我们的路径具有显示的形状和列出的点,我想放下第一组的"内角"点,同时保留"内部角落的一对"(图像中的一对)第2位.
PathIterator并建立一个新的GeneralPath掉落奇异的内角 - 如果我能想出如何识别它们!).以下是要使用的代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
/* Gain …Run Code Online (Sandbox Code Playgroud) 标题说明了一切,我一直在寻找并找不到任何直截了当的东西.如何用点(x1,y1)和(x2,y2)取一条线并检查它在矩形(xR,yR)之间的交点?我在Line2D包中看到有一些交集方法,但不知道如何设置它.有人能告诉我一个正确的方法来设置它来检查交叉点(碰撞)吗?
我是 Java 和编程的新手,我正在尝试用宇宙飞船和外星人编写一个小射击游戏,但在图形方面有很多问题。似乎我混合了很多不同类型的组件。
我该怎么做才正确?
- 我应该使用 SwingJFrame然后将其添加为Graphics对象吗?
- 我应该先制作一个面板,然后在上面添加图形吗?
- 或者我应该使用画布而不是 JPanel?
有很多选择,在网上搜索答案让我很困惑。一些人建议使用该paint()方法,而另一些人则在使用paintComponent()...
以正确顺序放置图形的首选方式是什么,我应该使用哪些类?
我正在尝试使用随机 x,y 值fontSize根据 BufferedImage 上的词频绘制随机文本。drawString(word, x, y)不幸的是,它绘制了重叠的随机文本。图像帧大小为 1200 x 650,x、y 的随机数位于这些值之间。这是我的代码:
Random rand = new Random();
Font f = getRandomFont(fontSize);
FontMetrics metrics = graphics.getFontMetrics(f);
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
int textwidth = (int)(f.getStringBounds(word, frc).getWidth());
int textheight = (int)(f.getStringBounds(word, frc).getHeight());
graphics.setColor(Color.red);
graphics.setFont(f);
int x = textwidth + rand.nextInt(800);
int y = -textheight + rand.nextInt(800);
graphics.drawString(word, x , y );
Run Code Online (Sandbox Code Playgroud) 我应该用AWT开发一个Java游戏.我坚持"碰撞检测"的概念.如果您可以帮助我解释概念(如何工作)或举例(源代码)的任何教程,我将不胜感激.
我正在编写一个代码,其中我绘制了两个矩形作为障碍物和一个椭圆形作为机器人。机器人在障碍物静止时移动。问题是机器人的位置在一开始是随机生成的,它有时会与矩形重叠。我一直在努力解决这个问题,但我找不到好的解决方案。
在绘制矩形之前,我尝试使用圆的 x,y 坐标检查矩形的边界。但是,它只检查该单个点,有时其他一些圆点与矩形重叠。我尝试了 intersect 方法,但我无法在我的代码中实现它,因为我正在使用 fillOval 和 fillRect。
我知道这个问题已经在社区中多次提出。但是,所有答案都围绕 AWT 中的 intersect 方法展开。我没有使用 Rectangle/Ellipse 类。我正在使用 fillRect 和 fillOval 来创建我的形状。在 initialize 方法中,这些形状第一次随机绘制在 JPanel 上时,是否还有其他方法可以防止碰撞。
代码:
public void initializePanel(Graphics g)
{
createObstacle(g,150,225,100,40);
createObstacle(g,500,300,40,100);
drawNParticles(g);
createRobot(g);
}
private void createRobot(Graphics g)
{
ArrayList<Integer> robot_list= new ArrayList<Integer>();
robot_list=positionRobot(robot_x,robot_y);
robot_x=robot_list.get(0);
robot_y=robot_list.get(1);
System.out.println("Robot:"+robot_x+"--"+robot_y+"--"+robot_orientation);
if((robot_x>620)||(robot_y>395)||(robot_x<1)||(robot_y<1))
{
robot_orientation=180;
}
drawRobot(g,robot_x,robot_y,robot_radius);
}
private ArrayList<Integer> positionRobot(int x, int y)
{
int robot_radius=50;
ArrayList<Integer> list= new ArrayList<Integer>();
if(counter==0)
{
x=randomInteger(25,655);//so that it stays inside the content_Walls panel
y=randomInteger(25,425); //so that …Run Code Online (Sandbox Code Playgroud) 我感觉非常愚蠢.但是为什么这段简单的代码不会改变椭圆的颜色呢?
基本上我想在椭圆上添加一个鼠标监听器 - 一个图形对象.当鼠标光标为椭圆形时,椭圆会改变其颜色.但是这段代码根本没有改变......这段代码仅供测试.
public class Help extends JFrame{
public static void main(String [] agrs){
Help h = new Help();
h.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
h.add(new Help_Option());
h.setSize(2000, 1000);
h.setVisible(true);
}
}
class Help_Option extends JComponent implements MouseListener{
Ellipse2D ellipse = new Ellipse2D.Double(0, 0, 1000, 500);
Color c = Color.BLACK;
public Help_Option(){
this.addMouseListener(this);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
g2d.draw(ellipse);
g2d.setColor(c);
g2d.fill(ellipse);
}
public void setColor(Color c){
this.c = c;
}
@Override
public void mouseClicked(MouseEvent e) {
} …Run Code Online (Sandbox Code Playgroud) 我正在制作一个java应用程序(用于练习),其中必须有一个面板和2个按钮.
好吧,我几乎完全完成了它(从第1点到第4点),但问题就出现了.当一个球与另一个球相撞时,我的代码将所有球颜色从红色变为蓝色,而不是将碰撞球的颜色改为蓝色.我知道我的错误在于new Balls().setColor(Color.Blue),但我不知道如何只改变碰撞的球.
下面是java应用程序和代码的屏幕截图.任何人都可以帮我解决这个问题吗?
源代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;`
public class BouncingBalls extends JPanel implements ActionListener {
protected List<Ball> balls = new ArrayList<Ball>(10);
private final Container container;
private final DrawCanvas canvas;
private int canvasWidth;
private int canvasHeight;
public JButton start, stop;
int [][] coords= new int[11][2];
int ammountOfBalls = 0;
static Color clr= …Run Code Online (Sandbox Code Playgroud)