snikitin-de / DiffusionWinFormsApp

πŸ’» ✨ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «Диффузия», ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ процСсс Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ проникновСния ΠΌΠΎΠ»Π΅ΠΊΡƒΠ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ вСщСства ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈ написанная Π² процСссС изучСния Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Windows Forms ΠΈ ООП.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

πŸ’» DiffusionWinFormsApp

πŸ’» ✨ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «Диффузия», ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ процСсс Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ проникновСния ΠΌΠΎΠ»Π΅ΠΊΡƒΠ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ вСщСства ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈ написанная Π² процСссС изучСния Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Windows Forms ΠΈ ООП.

πŸ“„ ОписаниС

Π­ΠΊΡ€Π°Π½ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части экрана ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ появляСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ², Π½ΠΎ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части экрана ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠ².

По Ρ‰Π΅Π»Ρ‡ΠΊΡƒ ΠΌΡ‹ΡˆΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ мСстС ΡˆΠ°Ρ€ΠΈΠΊΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ случайноС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана считаСтся количСство соударСний со стСнкой ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ².

По Ρ‰Π΅Π»Ρ‡ΠΊΡƒ ΠΌΡ‹ΡˆΠΈ ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ "Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π°Π·Π° Π½Π° стСнки сосуда для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π³Π°Π·ΠΎΠ²".

Когда ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ "ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π³Π°Π·ΠΎΠ²" процСсс останавливаСтся. Диффузия являСтся Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° количСство ΡƒΠ΄Π°Ρ€ΠΎΠ² Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π΄Π»ΠΈΠ½Ρ‹ Π½Π° всСх стСнках ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ сравнСния ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠ².

πŸ’» Π Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

πŸ”§ ВСхничСская Ρ‡Π°ΡΡ‚ΡŒ

  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Forms.
  • Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с соблюдСниСм ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП.

🧩 АрхитСктура

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ "Common" являСтся ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ классов для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²:

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит ΠΎΠ±Ρ‰ΠΈΠΉ класс "Ball" ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡˆΠ°Ρ€ΠΈΠΊΠΈ со своими особСнностями.

πŸ“ ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄ΠΈΡ„Ρ„ΡƒΠ·ΠΈΠΈ

Π§Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса Π΄ΠΈΡ„Ρ„ΡƒΠ·ΠΈΠΈ:

private double CalculateEvennessFactor(int wallCountHitted, int wallLength)
{
   return Math.Round(wallCountHitted / (double)wallLength, 4);
}

private bool EqualTo(double value1, double value2, double epsilon)
{
   return Math.Abs(value1 - value2) < epsilon;
}

public List<EvennessFactor> CalculateEvennessFactor()
{
   var evennessFactors = new List<EvennessFactor>();
   var topEvenessFactor = CalculateEvennessFactor(topCountHitted, width);
   var bottomEvenessFactor = CalculateEvennessFactor(bottomCountHitted, width);
   var leftEvenessFactor = CalculateEvennessFactor(leftCountHitted, height);
   var rightEvenessFactor = CalculateEvennessFactor(rightCountHitted, height);

   evennessFactors.Add(new EvennessFactor(Side.Top, topEvenessFactor));
   evennessFactors.Add(new EvennessFactor(Side.Bottom, bottomEvenessFactor));
   evennessFactors.Add(new EvennessFactor(Side.Left, leftEvenessFactor));
   evennessFactors.Add(new EvennessFactor(Side.Right, rightEvenessFactor));

   return evennessFactors;
}

public bool IsEnd()
{
   var evennessFactors = CalculateEvennessFactor();
   var isEnd = false;

   if(evennessFactors.Max(x => x.EvennessFactorValue) > epsilon)
   {
       var evennessFactorsMin = evennessFactors.Min(x => x.EvennessFactorValue);
       var evennessFactorsMax = evennessFactors.Max(x => x.EvennessFactorValue);

       isEnd = EqualTo(evennessFactorsMin, evennessFactorsMax, epsilon);
   }

   return isEnd;
}

About

πŸ’» ✨ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «Диффузия», ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ процСсс Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ проникновСния ΠΌΠΎΠ»Π΅ΠΊΡƒΠ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ вСщСства ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈ написанная Π² процСссС изучСния Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Windows Forms ΠΈ ООП.


Languages

Language:C# 100.0%