C# WPF 自己写的一个模拟病毒传播的程序,有可视化

这篇具有很好参考价值的文章主要介绍了C# WPF 自己写的一个模拟病毒传播的程序,有可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源代码: https://github.com/t39q/VirusSpread
C# WPF 自己写的一个模拟病毒传播的程序,有可视化,c#,wpf,java

主要代码文章来源地址https://www.toymoban.com/news/detail-701413.html

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace VirusSpread.BussnessLogic
{
    public class VirusSpread
    {
        public static ConcurrentBag<Model.PeopleModel.People> peoples;

        public static void Init()
        {
            peoples = new ConcurrentBag<Model.PeopleModel.People>();
            Random random = new Random(DateTime.Now.Millisecond * DateTime.Now.Second);
            for (int i = 0; i < 100; i++)
            {
                Model.PeopleModel.People people = new Model.PeopleModel.People();
                people.ID = i;
                people.X = random.NextDouble() * 400;
                people.Y = random.NextDouble() * 400;
                people.Disease = false;
                peoples.Add(people);
            }
            for (int i = 100; i < 103; i++)
            {
                Model.PeopleModel.People people = new Model.PeopleModel.People();
                people.ID = i;
                people.X = random.NextDouble() * 400;
                people.Y = random.NextDouble() * 400;
                people.Disease = true;
                peoples.Add(people);
            }
        }
        public static void Run(int spreadCount,int moveDistance)
        {
            int count = 0;
            Random random = new Random(DateTime.Now.Millisecond * DateTime.Now.Second);
            while (true)
            {
                if (count > spreadCount)
                {
                    break;
                }
                foreach (var item in peoples)
                {
                    int parity = random.Next(0,200);
                    double tempX, tempY;
                    if (parity % 2 == 0)
                    {
                        tempX = item.X + random.NextDouble() * moveDistance;
                        tempY = item.Y + random.NextDouble() * moveDistance;
                    }
                    else
                    {
                        tempX = item.X - random.NextDouble() * moveDistance;
                        tempY = item.Y - random.NextDouble() * moveDistance;
                    }
                    
                    if (tempX>0 && tempX < 400 && tempY>0 && tempY < 400)
                    {
                        item.X = tempX;
                        item.Y = tempY;
                    }
                    
                }
                Thread.Sleep(1000);
                count++;
            }
        }
        public static void Spread(int spreadCount,int infectious)
        {
            int count = 0;
            while (true)
            {
                if (count > spreadCount)
                {
                    break;
                }
                var healthy = peoples.Where(item => item.Disease == false).ToList();
                var infected = peoples.Where(item => item.Disease == true).ToList();


                var pairsJoin = (from healthyItem in healthy
                                 from infectedItem in infected
                                 select new { healthyItem, infectedItem }).ToList();

                foreach (var item in pairsJoin)
                {
                    CalcDistance(item.healthyItem, item.infectedItem, out double distance);
                    if (distance < infectious)
                    {
                        var infectedLabel = peoples.Where(find => find.ID == item.healthyItem.ID).FirstOrDefault();
                        infectedLabel.Disease = true;
                    }
                }
                Thread.Sleep(1000);
                count++;
            }
        }
        public static void Display(out string statistics)
        {
            statistics = peoples.Where(item => item.Disease == true).Count().ToString();
        }
        public static void CalcDistance(Model.PeopleModel.People A, Model.PeopleModel.People B, out double distance)
        {
            double X = Math.Abs(A.X - B.X);
            double Y = Math.Abs(A.Y - B.Y);
            distance = Math.Sqrt(X * X + Y * Y);
        }
    }
}

到了这里,关于C# WPF 自己写的一个模拟病毒传播的程序,有可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 随手写的小程序2 一个nc能控制的程序

    小程序源代码 下载: https://download.csdn.net/download/nn_84/88846445?spm=1001.2014.3001.5501 请下载 Qt 5.12.12 server.pro : mythread.h : server.h : mythread.cpp : server.cpp : main.cpp :

    2024年02月21日
    浏览(41)
  • idea切换分支忘记commit,导致自己辛苦写的代码被覆盖,找不回来,别慌,这里教你一个好办法找回你未提交的代码

    问题描述:写了很多个接口,没有commit,然后拉取了同事的分支,发现自己写的代码全部不见了,被覆盖了. 解决思路:git没有commit,那么网上说的那些用git reflog git show git merge git reset --soft commmitld等等那些关于git的命令其实都没有意义的.正确的思路应该是从本地编辑软件的log记录入手

    2024年02月11日
    浏览(59)
  • c#写的端口监听,程序退出后,再次运行提示端口占用,且进程不存在

    我用c#写了一个监听29999端口,进程结束后再次启动发现端口被占用,但是运行netstat -ano | findstr 29999找到进程ID后,却没有这个进程  经查询这个监听29999进程虽然没了,但是要找到他的父进程,把父进程关闭了才可以,参考下面的例子 In the first place, you must find the process that i

    2024年02月11日
    浏览(48)
  • 一个用python PyQT写的背单词小程序

    主要用到了QGridLayout, QTableWidget

    2024年02月04日
    浏览(42)
  • chatgpt帮我写的一个小程序气泡框代码

    效果图 这是一个气泡框 .bubble { position: relative; padding: 10px; border-radius: 8px; background-color: #ddd; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } .triangle { position: absolute; width: 0; height: 0; top: -10px; left: 50%; margin-left: -10px; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px soli

    2024年02月02日
    浏览(46)
  • 注意Libgcc_a挖矿病毒传播!内附自查方法

    近期,我们监测发现一种新型劫持变种病毒,经分析其主体程序为XMrig挖矿病毒家族的变种,该病毒具有较强的顽固性和隐蔽性,难以被查杀,进程杀死后自启动。此外该类病毒还会更改主机配置,重定向端口至远程服务器,通过github下载开源的暴力破解工具对内网主机进行

    2024年02月06日
    浏览(40)
  • 基于springboot的一个小说阅读App的设计与实现+48151(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案

            大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在小说在线阅读的需求下,开发一款小说阅读APP,将复杂的系统进行拆分,能够实现对需求的变化快

    2024年02月04日
    浏览(46)
  • 有一种新型病毒在 3Ds Max 环境中传播,如何避免?

    3ds Max渲染慢,可以使用渲云渲染农场: 渲云渲染农场解决本地渲染慢、电脑配置不足、紧急项目渲染等问题,可批量渲染,批量出结果,速度快,效率高。 此外3dmax支持的 CG MAGIC插件专业版正式上线, CG MAGIC是一款基于3ds Max深度开发的免费智能化辅助插件,上千项实用功能

    2024年02月12日
    浏览(40)
  • 黑客利用F5 BIG-IP漏洞传播Linux挖矿病毒

    F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。 近日,F5的安全公告更新了BIG-IP,BIG-IQ中的多个严重漏洞,建议广大用户及时将F5 BIG-IP/BIG-IQ升级到最新版本,最新版本下载地址: https://support.f5.com/csp/article/K02566623,漏洞

    2024年02月20日
    浏览(52)
  • wpf C# partial关键字:把一个类分成几个

    将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现。 (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。 (3) 需要多人合作编写一个类。

    2024年01月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包