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

源代码: https://github.com/t39q/VirusSpread
在这里插入图片描述

主要代码

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 healthyfrom infectedItem in infectedselect 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);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106816.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript学习--Day04

元字符 边界符&#xff1a; /^/&#xff1a;以什么开头 /$/&#xff1a;以什么结尾 量词&#xff1a; 预定义类&#xff1a;

IGBT和碳化硅SiC模块,全球市场总体规模,前二十大厂商排名及市场份额

IGBT模块与碳化硅SiC模块全球市场总体规模 2023年全球IGBT模块市场规模大约为67亿美元&#xff0c;预计2029年将达到145亿美元&#xff0c;未来几年年复合增长率CAGR为13.6%。 2023年全球碳化硅SiC模块市场规模大约为16.9亿美元&#xff0c;预计2029年将达到92亿美元&#xff…

浅谈Dead reckoning实现原理以及常用算法

0. 简介 航位推算是一个很常见的定位方法。在知道当前时刻的位置&#xff0c;然后通过imu等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候&#xff0c;GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面&#xff0c;车辆位置也会移动很多。那么这个时候就…

仿东郊到家app系统及功能介绍

类似东郊到家app系统开发&#xff0c;预约sap东郊到家软件定制开发&#xff0c;东郊到家小程序APP开发&#xff0c;东郊到家模式系统定制开发 一、东郊到家软件介绍 1、东郊到家app是一家以推拿为主项&#xff0c;个人定制型的o2o平台&#xff0c;东郊到家app平台提供、正规、安…

VR农学虚拟仿真情景实训教学演示

首先&#xff0c;VR农学虚拟仿真情景实训教学提供了更为真实的实践环境。传统的农学实训往往受制于时间、空间和资源的限制&#xff0c;学生只能通过观察或简单的模拟来学习农业知识和技能。而借助虚拟现实技术&#xff0c;学生可以进入虚拟农场&#xff0c;与各种农作物、工具…

docker安装开发常用软件MySQL,Redis,rabbitMQ

Docker安装 docker官网&#xff1a;Docker: Accelerated Container Application Development docker镜像仓库&#xff1a;https://hub.docker.com/search?qnginx 官网的安装教程&#xff1a;Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…

运维经验记录 在CentOS上挂载Windows共享磁盘

1、需求&#xff1a; 非root用户&#xff08;普通用户&#xff09;能够读写windows共享目录&#xff0c;比如查看文件、创建文件、修改文件、删除文件 # 让普通用户也可以正常读写 uidvalue and gidvalue Set the owner and group of the root of the file system (default: …

Spring与OAuth2:实现第三方认证和授权的最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

综合续航达1040公里:腾势计划2024年在香港上市,售价60-100 万

腾势汽车表示&#xff0c;他们计划于2024年在香港地区上市全新的D9车型。这款中大型高端新能源MPV是通过DM-i超级混动技术打造的&#xff0c;由于综合续航能力达到1040公里&#xff0c;且纯电续航最大可达190公里&#xff0c;这款车已经引起了广泛关注。据腾势销售事业部总经理…

pc项目集成截图工具

代码&#xff1a; <template><div class"hello"><img src"../assets/logo.png" ref"image"><button click"screenshot">开始截图</button><hr><div class"img" id"img"&…

Pytorch框架详解

文章目录 引言1. 安装与配置1.1 如何安装PyTorch1.2 验证安装 2. 基础概念2.1 张量&#xff08;Tensors&#xff09;2.1.1 张量的基本特性2.1.2 创建张量2.1.3 张量操作 2.2 自动微分&#xff08;Autograd&#xff09;2.2.1 基本使用2.2.2 计算梯度2.2.3 停止追踪历史2.2.4 自定…

ActiveReportsJs 账票印刷

参考资料 官方文档 一. HTML部分 在页面上添加了Loading效果&#xff0c;账票印刷开始时显示Loading效果&#xff0c;印刷结束后隐藏Loading效果。ar-js-core.js是核心文件ar-js-pdf.js用来印刷PDFar-js-xlsx.js用来印刷EXCELar-js-locales.js用来设置语言 <!DOCTYPE htm…