相关疑难解决方法(0)

平滑锯齿状路径

前几天我正在参与线程图像/图形到一个形状,并通过Rectangle迭代添加到图像来做一个黑客尝试获取图像的轮廓Area.那很慢.

这个例子改为构建一个GeneralPathArea从GP 创建.快多了.

用于处理的样本图像

左上角的图像是"源图像".右边的两个是处理轮廓的各个阶段.它们都有圆形边缘和三角形倾斜边缘的锯齿状边缘.

我希望获得一种能够消除或减少锯齿状的形状.

在ASCII艺术中.

情况1:

  1234
1 **
2 **
3 ***
4 ***
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)

角落在:

  • (2,3)内角
  • (3,3)
  • (3,5)内角
  • (4,5)

案例2:

  1234
1 ****
2 ****
3 **
4 **
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)

角落在:

  • (4,2)
  • (2,2)内角
  • (2,5)内角
  • (4,5)

假设我们的路径具有显示的形状和列出的点,我想放下第一组的"内角"点,同时保留"内部角落的一对"(图像中的一对)第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)

java image image-processing java-2d edge-detection

13
推荐指数
1
解决办法
5823
查看次数

如何检查直线和矩形之间的交点?

标题说明了一切,我一直在寻找并找不到任何直截了当的东西.如何用点(x1,y1)和(x2,y2)取一条线并检查它在矩形(xR,yR)之间的交点?我在Line2D包中看到有一些交集方法,但不知道如何设置它.有人能告诉我一个正确的方法来设置它来检查交叉点(碰撞)吗?

java intersection line rectangles collision

9
推荐指数
3
解决办法
2万
查看次数

在游戏中使用图形的最佳方式

我是 Java 和编程的新手,我正在尝试用宇宙飞船和外星人编写一个小射击游戏,但在图形方面有很多问题。似乎我混合了很多不同类型的组件。

我该怎么做才正确?
- 我应该使用 SwingJFrame然后将其添加为Graphics对象吗?
- 我应该先制作一个面板,然后在上面添加图形吗?
- 或者我应该使用画布而不是 JPanel?

有很多选择,在网上搜索答案让我很困惑。一些人建议使用该paint()方法,而另一些人则在使用paintComponent()...

以正确顺序放置图形的首选方式是什么,我应该使用哪些类?

java animation swing awt java-2d

4
推荐指数
2
解决办法
5194
查看次数

Java图形随机文本

我正在尝试使用随机 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)

java random

3
推荐指数
1
解决办法
940
查看次数

碰撞检测教程

我应该用AWT开发一个Java游戏.我坚持"碰撞检测"的概念.如果您可以帮助我解释概念(如何工作)或举例(源代码)的任何教程,我将不胜感激.

java awt collision-detection java-2d

2
推荐指数
1
解决办法
5747
查看次数

awt无相交法的圆与矩形碰撞检测

我正在编写一个代码,其中我绘制了两个矩形作为障碍物和一个椭圆形作为机器人。机器人在障碍物静止时移动。问题是机器人的位置在一开始是随机生成的,它有时会与矩形重叠。我一直在努力解决这个问题,但我找不到好的解决方案。

在绘制矩形之前,我尝试使用圆的 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)

java swing collision-detection

2
推荐指数
1
解决办法
1011
查看次数

图形对象上的MouseListener

我感觉非常愚蠢.但是为什么这段简单的代码不会改变椭圆的颜色呢?

基本上我想在椭圆上添加一个鼠标监听器 - 一个图形对象.当鼠标光标为椭圆形时,椭圆会改变其颜色.但是这段代码根本没有改变......这段代码仅供测试.

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 graphics swing java-2d mouselistener

1
推荐指数
2
解决办法
3021
查看次数

碰撞时改变球的颜色

我正在制作一个java应用程序(用于练习),其中必须有一个面板和2个按钮.

  1. 每次按下开始按钮时,必须显示一个球并且它会根据线程移动.用户可以一直显示最多10个独立球.
  2. 按下停止按钮,每次按下停止按钮时必须移除1个球(例如,当有4个球时,用户必须按4次停止按钮才能独立移除所有球)
  3. 球的所有x和y坐标必须存储在矩阵中
  4. 当一个或多个球相互碰撞时,只有碰撞的球必须从红色变为蓝色

好吧,我几乎完全完成了它(从第1点到第4点),但问题就出现了.当一个球与另一个球相撞时,我的代码将所有球颜色从红色变为蓝色,而不是将碰撞球的颜色改为蓝色.我知道我的错误在于new Balls().setColor(Color.Blue),但我不知道如何只改变碰撞的球.

下面是java应用程序和代码的屏幕截图.任何人都可以帮我解决这个问题吗?

PRINTSCREEN: 在此输入图像描述

源代码:

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)

java swing

1
推荐指数
1
解决办法
679
查看次数