当前位置: 首页 > 知识库问答 >
问题:

利用Java实现环面平面上的包含/排除

巫经义
2023-03-14

我写了一个程序来解决以下问题:

在一个环形平面上实现扩散限制聚集模拟,其中种子是随机产生的,粒子是随机移动的。如果粒子没有落在种子或粒子附近,它们就会移动。其中用户输入种子(红色像素),粒子(黑色像素),步骤(无或迭代),平面大小。

我的代码很慢。我怎样才能让它更快?

我随机创建x和y坐标并绘制红色像素(种子),然后随机创建x和y为黑色像素(粒子),如果一个黑色像素降落在有红色或黑色像素的地方,它可以停留,否则它再次随机移动,直到没有更多的粒子。如果像素离开边界,如x>border,则x=0;如果x<1,则x=边框。Y也一样。

这只是意味着,如果它降落在边界上,我将它移到相反的边界。然后再次检查相邻像素。我有一个外环来生成种子,内环来生成粒子。在内部循环中,我检查x、y位置:

//Place, move, and "stick" the particles; stop if either steps or particles = 0
for (int p = 0; p < particles; p++) {

    for (int s = 0; s < steps; s++) {
        if (xPos > image.getWidth() ) {
                       do something
                    } 
        else if (xPos < 1) {
                        do something
                    }
        if (yPos > image.getHeight() - 2) {
                         do something
                    } 
        else if (yPos < 1) {
                         do something
                    } 
        else if (xPos > image.getWidth() && yPos > image.getHeight()) {
                         do something
                    } 
        else if (xPos < 1 && yPos < 1) {
                         do something
                    }

     //If the surrounding pixels' color is not white, make that particle stick.
            if (moveValid()) {
                image.setRGB(xPos, yPos, 0xFF000000);
            } 


            //Otherwise, move in a random direction
            else {
                if(xPos == 1 && image.getRGB(size - 2, yPos) != 0xFFFFFFFF){
                   draw(xPos,yPos);
                }
                else if(xPos == size - 2 && image.getRGB(1,yPos) != 0xFFFFFFFF){
                    draw(xPos,yPos);
                }
                if(yPos == 1 && image.getRGB(xPos, size - 2) != 0xFFFFFFFF){
                   draw(xPos,yPos);
                }
                else if(yPos == size - 2 && image.getRGB(xPos,1) != 0xFFFFFFFF){
                    draw(xPos,yPos);
                }
                else {
                    move();

                }


            }
        }

        //Regenerate random x and y positions for the next particle   
        xPos = random.nextInt(size);
        yPos = random.nextInt(size);
    }

共有1个答案

姜志
2023-03-14

虽然未显示draw()的实现,但它看起来像是在更新BufferedImage然后呈现它。

>

  • 第一步始终是配置现有代码,寻找易于实现的优化。

    第二步有时是搁置现有代码,尝试一种不同的方法。

    您可能可以利用Mode-View-Controller模式,这里概述并讨论了这个模式。特别是,让您的DLA模型在后台线程上全速演进,同时以更可持续的速率更新您的视图。本文建议了几种同步方法,并包含了一个使用javax.swing.timer来调整更新速度的相关示例。

  •  类似资料:
    • 与strncmp相比,有没有一种方法可以使用标准库简化struct数组上的循环? 以下是我的尝试失败,因为std::count\U if抱怨没有重载函数std::begin matches的实例。 错误是: C2784:常量元素*标准::开始(标准::初始值设定项\u列表

    • 本文向大家介绍利用JS实现页面删除并重新排序功能,包括了利用JS实现页面删除并重新排序功能的使用技巧和注意事项,需要的朋友参考一下 首先,用jqury选择器,选中勾选的行: 然后弹出一个确认是否删除框,为是否删除框中的确定绑定一个delInd()事件; 先在页面把选中的那一行,remove或者html(“ ”)掉, 在对剩下的行重新排序,又需要jqury选择器,选中表格的行,并进行循环赋值: 以上

    • 有人能展示将json反序列化为TreeMap的代码吗?一些简单的例子,其中包括json的例子,我将展示我所尝试的,首先,我是新手,所以请原谅我,这是我的json(可能我有错误,甚至在这里): 我的代码不起作用

    • 我了解java streams,并尝试实现map、filter、fold(使用自定义函数作为参数),包括严格的和惰性的计算方法。 然而,我无法在java中实现flatmap的惰性实现。Normal map、filter、fold只是在主迭代器(如果是它的列表)上运行的组合函数,如果传入值为null,则丢弃函数的apply。 但是flatMap输入函数会生成另一个列表(流),需要将其展平, lazy

    • 本文向大家介绍利用Nginx的map指令实现页面跳转,包括了利用Nginx的map指令实现页面跳转的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要介绍了利用Nginx中map指令实现页面跳转的方法,有需要的下面来一起学习学习。 实现方法 在 nginx.conf 的 http 域中添加 map 指令规则,这里包含一个 URL 规则映射文件: map 指令支持引入一个映射文件的方式,这里 r

    • 问题内容: 我对Spring框架还很陌生,并且在设置我当前正在研究的项目时遇到了一些麻烦。我需要能够连接到两个不同的数据库,一个是MongoDB,另一个是MSSQL。我正在使用JPA连接到MSSQL。 我遇到的问题是,当我希望它对MSSQL进行调用时,它似乎正在尝试对Mongo数据库进行调用,而我不确定如何告诉它要读取的内容。我看到过这些帖子建议使用注释将其定向到正确的实现,但是我认为这对我的情况