Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 挥杆抽签点_Java_Swing - Fatal编程技术网

Java 挥杆抽签点

Java 挥杆抽签点,java,swing,Java,Swing,我必须用java编写一个数学应用程序。这个应用程序计算向量的加法和标量乘法,我必须用向量(x,y)设置三个起点a,B和C(ABC是三角形)。该应用程序有一个函数,可以迭代一个循环,循环将运行50000次(该函数计算从起点a、B、C(随机)到新点p的半路径),在这个函数中,我想画所有点,但现在我想用Java Swing画点。现在我已经解决了图纸上的点A,B,C。这些点的计算现在也解决了 下面是我的Java代码,供其他人如何编写类似于我的程序的程序 矢量计算 点形 支点 导入java.awt.Gra

我必须用java编写一个数学应用程序。这个应用程序计算向量的加法和标量乘法,我必须用向量(x,y)设置三个起点a,B和C(ABC是三角形)。该应用程序有一个函数,可以迭代一个循环,循环将运行50000次(该函数计算从起点a、B、C(随机)到新点p的半路径),在这个函数中,我想画所有点,但现在我想用Java Swing画点。现在我已经解决了图纸上的点A,B,C。这些点的计算现在也解决了

下面是我的Java代码,供其他人如何编写类似于我的程序的程序

矢量计算 点形 支点
导入java.awt.Graphics;
导入java.util.ArrayList;
导入javax.swing.JFrame;
导入javax.swing.SwingUtilities;
公共类DrawPoint扩展JFrame{
静态矢量计算vc=新矢量计算();
public ArrayList points=vc.getList();
公共支点(字符串标题){
超级(标题);
此.setDefaultCloseOperation(关闭时退出);
这个.setSize(700700);
此.setLocationRelativeTo(空);
}
@凌驾
公共空间涂料(图g){
对于(点s:点){
s、 抽签(g);
}
}
公共静态void main(字符串参数[]){
vc.setUpPoints();
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
支点d=新支点(“MLAIT矢量计算”);
d、 setVisible(真);
}
});
}
}

您从未在
main应用程序中初始化
veccal
在矢量计算中,您也从不初始化
a
b
c
g

int px=(int)p[0];
      int px = (int) p[0];
      int py = (int) p[1];
//px and py never changes.

          for(int i = 0; i < 50000 ; i++) {

            double pABC[] = {0,0};
            pABC = vc.addVectors(vc.randomVector(POINT_A,POINT_B,POINT_C),vc.multipleScalar(-1.0,p));
            p = vc.addVectors(p,vc.multipleScalar(0.5,pABC));
            synchronized (p) { //I don't think you need a synchronised call here.                  
                g2d.setColor(new Color(0,0,0));
                //px = (int)p[0] and py = (int)p[1];
                g2d.fillOval(px, py, 6, 6);
            }
      }
int-py=(int)p[1]; //px和py永远不会改变。 对于(int i=0;i<50000;i++){ 双pABC[]={0,0}; pABC=vc.addVectors(vc.randomVector(点A,点B,点C),vc.multipleScalar(-1.0,p)); p=vc.addVectors(p,vc.multipleScalar(0.5,pABC)); 同步(p){//我想你不需要在这里进行同步通话。 g2d.setColor(新颜色(0,0,0)); //px=(int)p[0]和py=(int)p[1]; g2d.椭圆形(px,py,6,6); } }
您只需初始化px和py一次。所以你实际上画了50000次,但一次又一次地画同一个点。
制定一种矢量计算方法,以获取最新的点

您能将空指针异常的回溯粘贴到您的问题中吗?在更新的示例中,您从未初始化
vc
。谢谢,但这不是主要问题。我只是改变了这一点,我仍然得到一个空指针,但这应该是swing代码而不是普通java代码的指针。但是我对swing还不熟悉。swing图形应该用什么初始化?@salocin将
Graphics
实例留给swing。不要提供自己的,也不要使用
getGraphics()
。相反,请传递由
paintComponent
提供的。您也不应该缓存这些实例。通过
paintComponent
调用绘画方法。我仍然没有。如何将值传递给paintComponent方法?您需要使用
g2d.fillOval(px-3,py-3,6,6)
使圆以绘制的点为中心。好的,但是您现在有了吗?我可以为绘制实现更好的算法吗?我想您应该计算Vectorcalculation类中的所有点。制作一个getter方法来检索所有点的列表,并遍历它以绘制所有点。当我遍历列表时,只绘制arrayList中的一个对象。
import java.awt.Graphics;

public abstract class Point {
    private int x;
    private int y;
    private int width;
    private int height;

    public Point() {
        this(0, 0, 1, 1);
    }

    public Point(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public abstract void draw(Graphics g);

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}
       import java.awt.Graphics;

    public class PointShape extends Point {
        public PointShape(int x, int y, int width, int height) {
            super(x, y, width, height);
        }

        public PointShape() {
            super();
        }

        @Override
        public void draw(Graphics g) {
            g.drawOval(getX(), getY(), getWidth(), getHeight());
        }
    }
    import java.awt.Graphics;
    import java.util.ArrayList;


    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;

    public class DrawPoint extends JFrame {

        static Vectorcalculation vc = new Vectorcalculation();

        public ArrayList<Point> points = vc.getList();

        public DrawPoint(String title) {
            super(title);

            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setSize(700, 700);

            this.setLocationRelativeTo(null);
        }

        @Override
        public void paint(Graphics g) {
            for (Point s : points) {
                s.draw(g);
            }
        }

        public static void main(String args[]) {
            vc.setUpPoints();
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    DrawPoint d = new DrawPoint("MLAIT VectorCalculation");
                    d.setVisible(true);
                }
            });
        }
    }
      int px = (int) p[0];
      int py = (int) p[1];
//px and py never changes.

          for(int i = 0; i < 50000 ; i++) {

            double pABC[] = {0,0};
            pABC = vc.addVectors(vc.randomVector(POINT_A,POINT_B,POINT_C),vc.multipleScalar(-1.0,p));
            p = vc.addVectors(p,vc.multipleScalar(0.5,pABC));
            synchronized (p) { //I don't think you need a synchronised call here.                  
                g2d.setColor(new Color(0,0,0));
                //px = (int)p[0] and py = (int)p[1];
                g2d.fillOval(px, py, 6, 6);
            }
      }