Java 界内抛物线
我有一个JPanel 200x200 我试图创建一个函数,生成一条随机抛物线,其边界为JPanel,高度不能低于100(屏幕中间),我基本上想在这些抛物线周围移动一个形状 以下是我开始使用的一些代码:Java 界内抛物线,java,swing,java-2d,Java,Swing,Java 2d,我有一个JPanel 200x200 我试图创建一个函数,生成一条随机抛物线,其边界为JPanel,高度不能低于100(屏幕中间),我基本上想在这些抛物线周围移动一个形状 以下是我开始使用的一些代码: Random random = new Random(); int y; int x; int size = random.nextInt(10); int translation = random.nextInt(50); int height = random.nextInt(100) -
Random random = new Random(); int y; int x;
int size = random.nextInt(10);
int translation = random.nextInt(50);
int height = random.nextInt(100) - 200; //between 100 and 200
//抛物线函数:y=((x/7-30))^2
//x和y是绘制形状的坐标
while(y != 200){
y = (float)Math.pow((float)xloc / size - translation ,2) + height;
x++;
}
我一直在研究FlatingPathIterator,但不太确定如何使用它们。我的职能
y = (float)Math.pow((float)xloc / size - translation ,2) + height;`
有时打印边界外的抛物线,我如何编辑它以打印边界内的抛物线?有一个Java Swing形状生成器,用于此称为Quad2dCurve。调用
getPathIterator
可以为曲线上的点提供枚举数
下面是一些示例代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.Random;
import javax.swing.*;
final class TestCanvas extends JComponent {
int size = 200;
int n = 10;
float[] ph = new float[n];
float[] pw = new float[n];
float[] px = new float[n];
Random gen = new Random();
TestCanvas() {
makeRandomParabolas();
setFocusable(true);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
makeRandomParabolas();
repaint();
float [] coords = new float [6];
for (int i = 0; i < n; i++) {
PathIterator pi = getQuadCurve(i).getPathIterator(null, 0.1);
System.out.print(i + ":");
while (!pi.isDone()) {
switch (pi.currentSegment(coords)) {
case PathIterator.SEG_MOVETO:
System.out.print(" move to");
break;
case PathIterator.SEG_LINETO:
System.out.print(" line to");
break;
default:
System.out.print(" unexpected");
break;
}
System.out.println(" (" + coords[0] + "," + coords[1]+")");
pi.next();
}
System.out.println();
}
}
});
}
QuadCurve2D.Float getQuadCurve(int i) {
return new QuadCurve2D.Float(px[i] - pw[i], size,
px[i], size - (2 * ph[i]),
px[i] + pw[i], size);
}
void makeRandomParabolas() {
for (int i = 0; i < n; i++) {
float x = 0.2f + 0.6f * gen.nextFloat();
px[i] = size * x;
pw[i] = size * (Math.min(x, 1 - x) * gen.nextFloat());
ph[i] = size * (0.5f + 0.5f * gen.nextFloat());
}
}
@Override
protected void paintComponent(Graphics g0) {
Graphics2D g = (Graphics2D) g0;
for (int i = 0; i < n; i++) {
g.draw(getQuadCurve(i));
}
}
}
public class Main extends JFrame {
public Main() {
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new TestCanvas());
getContentPane().setPreferredSize(new Dimension(200, 200));
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Main().setVisible(true);
}
});
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.*;
导入java.util.Random;
导入javax.swing.*;
最终类TestCanvas扩展了JComponent{
int size=200;
int n=10;
浮子[]ph=新浮子[n];
浮动[]pw=新浮动[n];
浮动[]px=新浮动[n];
Random gen=新的Random();
TestCanvas(){
做抛物线();
设置聚焦(真);
addKeyListener(新的KeyAdapter(){
@凌驾
按下公共无效键(按键事件e){
做抛物线();
重新油漆();
浮动[]坐标=新浮动[6];
对于(int i=0;i
“有什么建议吗?”1)要更快获得更好的帮助,请发布一个(最简单、完整、经过测试且可读的示例)。2) 添加一个更具体的问题。除了懒散的问题,“有什么建议吗?”太宽泛了。这会将结果扩展到封闭容器中。+1不包括KeyListener(2014年使用的),而不是KeyBindings@mKorbel谢谢,但我不知道你的意思。我想要任何能引起重画的钥匙。除了绑定到键盘上的所有键之外,键绑定还能做到这一点吗?没错,KeyListener是为史前AWT组件指定的,在这里使用KeyBindings tag()@Gene进行搜索。假设我想使用一个形状,使用随机抛物线,有没有办法把QuadCurve2D转换成一个方程,这样我就可以得到x和y坐标?@user3390695只要阅读QuadCurve2D
的文档就可以了。它的方法getPathIterator
返回一个对象,该对象将枚举曲线上的线段。我更改了代码,以便键处理程序将每个抛物线的路径打印到控制台。如果这能满足你的需求,那么你接受答案就好了。