ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠΠ»ΡŒΡ„Π°-смСшСниС: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполнСния

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ВСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° прСдставляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π½ΠΈΡ… Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΈ, прямыС, окруТности, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰ΠΈΠΉ случай, ΠΊΡ€ΠΈΠ²Ρ‹Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΉ, Ρ†Π²Π΅Ρ‚ заполнСния. Рисунок хранится ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… чисСл, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠΠ»ΡŒΡ„Π°-смСшСниС: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполнСния (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ
  • 2. ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²
  • 2.1 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚
  • 2.2 Алгоритм удалСния Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ
  • 2.3 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… ΠΈ Π½Π΅ Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ
  • 2.4 Закраска Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ простой ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния
  • 3. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 3.1 Π’Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  • 3.2 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  • 3.3 ОписаниС основных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
  • 3.4 Алгоритм взаимодСйствия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
  • 4. ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 4.1 ОписаниС интСрфСйса
  • 4.2 Руководство ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 4.3 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° — это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ инструмСнта создания ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. По ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ задания ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ основныС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: двумСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ Ρ‚рСхмСрная. ДвумСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ дСлится Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΡƒΡŽ, Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ ΠΈ Ρ„Ρ€Π°ΠΊΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ.

ВСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° прСдставляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ гСомСтричСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π½ΠΈΡ… Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΈ, прямыС, окруТности, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰ΠΈΠΉ случай, ΠΊΡ€ΠΈΠ²Ρ‹Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΉ, Ρ†Π²Π΅Ρ‚ заполнСния. Рисунок хранится ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… чисСл, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π΄Π°Ρ‘Ρ‚ простор для рСдактирования. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ.

Растровая Π³Ρ€Π°Ρ„ΠΈΠΊΠ° всСгда ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом (ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ) пиксСлСй. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ пиксСлю сопоставляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — яркости, Ρ†Π²Π΅Ρ‚Π°, прозрачности — ΠΈΠ»ΠΈ комбинация этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Растровый ΠΎΠ±Ρ€Π°Π· ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ число строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ². Π‘Π΅Π· особых ΠΏΠΎΡ‚Π΅Ρ€ΡŒ растровыС изобраТСния ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ изобраТСния Ρ‚ΠΎΠ³Π΄Π° исчСзнут навсСгда, Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠΌ прСдставлСнии, ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ пиксСльная сСтка. Π’ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ прСдставимо любоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ этот способ хранСния ΠΈΠΌΠ΅Π΅Ρ‚ свои нСдостатки: больший ΠΎΠ±ΡŠΡ‘ΠΌ памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ Ρ„Ρ€Π°ΠΊΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π»Π΅ΠΆΠΈΡ‚ понятиС Ρ„Ρ€Π°ΠΊΡ‚Π°Π»Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ свойства Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… структур. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС элСмСнтов мСньшСго ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° происходит ΠΏΠΎ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ всСго лишь нСсколькими матСматичСскими уравнСниями. Π€Ρ€Π°ΠΊΡ‚Π°Π»Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ классы ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, для Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Π»ΠΎ памяти. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ„Ρ€Π°ΠΊΡ‚Π°Π»Ρ‹ слабо ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΠΌ Π²Π½Π΅ этих классов.

ВрёхмСрная Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠ»ΠΎΡΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡŽ. Π’ Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ повСрхностСй ΠΈΠ»ΠΈ частиц. ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠΌ. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ. Π›ΡŽΠ±ΠΎΠΉ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½. Π’Π°ΠΊ, Ρƒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ 3 Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π²Π΅ΠΊΡ‚ΠΎΡ€ (x, y, z). Π£ΠΌΠ½ΠΎΠΆΠΈΠ² Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ (ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°/сдвига/ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€. Π‘Π΄Π΅Π»Π°Π² Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ со Π²ΡΠ΅ΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½, Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π² всС ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ прСдстоит ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ сцСну посрСдством Microsoft Visual Studio, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ программирования Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня C#.

Π°Π»ΡŒΡ„Π° смСшСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ трСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ„Π°-смСшСниС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²: ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅Ρ‚. ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наглядно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свойства ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… Ρ‚Π΅Π», Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° сквозь ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΈ ΡΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° (ΠΈΠ»ΠΈ Π΅Π³ΠΎ части) Π·Π° Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ.

БоздаваСмая сцСна Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²: Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π³Ρ€Π°Π½Π΅Π½ΠΎΠ³ΠΎ стакана ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡŒ ΠΊΡƒΠ±Π°. Π‘Ρ‚Π°ΠΊΠ°Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€ΠΎΠ»ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°, Π° ΠΊΡƒΠ± — Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ. Π‘Ρ‚Π°ΠΊΠ°Π½ состоит ΠΈΠ· 20 Π±ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ ΠΈ Π³Ρ€Π°Π½ΠΈ основания стакана, всС Π³Ρ€Π°Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ. ΠšΡƒΠ± — стандартная гСомСтричСская модСль, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ 6 Π³Ρ€Π°Π½Π΅ΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ². Данная сцСна Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ эффСкт прозрачности ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ освСщСния.

Рассмотрим ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΌΠΎΠ΄Π΅Π»ΠΈ стакана (Ρ‚Π°Π±Π»ΠΈΡ†Π° 1).

Π’Π°Π±Π»ΠΈΡ†Π° 1 — ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΌΠΎΠ΄Π΅Π»ΠΈ стакана

НомСр Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π₯

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z

— 50

— 50

— 48

— 50

— 15

— 40

— 50

— 30

— 28

— 50

— 42

— 15

— 50

— 48

— 50

— 50

— 50

— 48

— 50

— 42

— 50

— 30

— 50

— 15

— 50

— 50

— 50

— 50

— 50

— 50

— 15

— 50

— 28

— 50

— 40

— 50

— 48

— 50

— 60

— 58

— 19

— 48

— 36

— 35

— 50

— 18

— 58

— 60

— 58

— 50

— 36

— 19

— 18

— 35

— 48

— 58

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС стакан прСдставлСн Π² Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π°, с Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌ Π²Π΅Ρ€Ρ…ΠΎΠΌ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌ основаниСм. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚ 0 ΠΏΠΎ 19 ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ основаниС стакана, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²Π΅Ρ€ΡˆΠΈΠ½ строится Π³Ρ€Π°Π½ΡŒ основания стакана. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚ 20 Π΄ΠΎ 39 ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΡŒ стакана, Π½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ сосуда, Π³Ρ€Π°Π½ΡŒ ΠΈΠ· ΡΡ‚ΠΈΡ… Π²Π΅Ρ€ΡˆΠΈΠ½ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ стаканС прСдусмотрСно 20 Π±ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ, каТдая Π³Ρ€Π°Π½ΡŒ строится ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ соСдинСния Π²Π΅Ρ€ΡˆΠΈΠ½ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΎΠ΄Π½Π° ΠΈΠ· Π±ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 0, 20, 21, 1 (Ρ†ΠΈΠΊΠ»: i, i + 20, i + 21, i + 1).

Рассмотрим ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊΡƒΠ±Π° с Ρ€Π΅Π±Ρ€ΠΎΠΌ 50 (Ρ‚Π°Π±Π»ΠΈΡ†Π° 2).

Π’Π°Π±Π»ΠΈΡ†Π° 2 — ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊΡƒΠ±Π°

НомСр Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π₯

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z

ОснованиС ΠΊΡƒΠ±Π°

— 60

— 50

— 65

— 60

— 50

— 115

— 10

— 50

— 115

— 10

— 50

— 65

ВСрхняя Π³Ρ€Π°Π½ΡŒ

— 60

— 65

— 60

— 115

— 10

— 115

— 10

— 65

МодСль ΠΊΡƒΠ±Π° собираСтся ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ модСлирования стакана, сначала Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π³Ρ€Π°Π½ΡŒ основания, ΠΏΠΎΡ‚ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ создаСм Π±ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈ. КаТдая Π³Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π° задаСтся 4 Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ эти Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π΅Π΄ΠΈΠ½ΡƒΡŽ сцСну, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΉ систСмС, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΊ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ сцСны Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π³Ρ€Π°Π½Π΅ΠΉ, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ прозрачности ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ освСщСния всСй сцСны.

2. ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

2.1 ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ для построСния Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π»ΠΈ Π·Π°Π΄Π°Π½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. НСобходимо ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²ΠΈΠ΄ΠΎΠ²Ρ‹Π΅ (ΠΈ ΡΠΊΡ€Π°Π½Π½Ρ‹Π΅ для ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Для Π²ΠΈΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ пСрспСктивныС прСобразования для ΠΏΡ€ΠΈΠ΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ рСалистичности. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ модСль Π±Π΅Π· использования пСрспСктивного прСобразования, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΠΌΠ°Π½ зрСния, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΈΠ·-Π·Π° ракурса ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² пСрспСктивныС прСобразования, Π΄Π°Π½Π½Ρ‹ΠΉ эффСкт исчСзнСт. Π­ΠΊΡ€Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊ Π²ΠΈΠ΄ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ пСрспСктивныС прСобразования, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ наши ΠΌΠΎΠ΄Π΅Π»ΠΈ.

// Π’ΠΈΠ΄ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹:

View [i]. x = 20 * (int) Math. Round (Vertex [i]. x * (-Math. Sin (teta)) + Vertex [i]. y * Math. Cos (teta));

View [i]. y = 20 * (int) Math. Round (Vertex [i]. x * (-Math. Cos (phi) * Math. Cos (teta)) — Vertex [i]. y * (Math. Cos (phi) * Math. Sin (teta)) + Vertex [i]. z * Math. Sin (phi));

View [i]. z = - 20 * (int) Math. Round (Vertex [i]. x * (-Math. Sin (phi) * Math. Cos (teta)) — Vertex [i]. y * (Math. Sin (phi) * Math. Sin (teta)) — Vertex [i]. z * (Math. Cos (phi)) + R0);

// ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

Perspective [i]. X = pictureBox1. Width / 2 + (int) Math. Round (D0 * (View [i]. x / View [i]. z));

Perspective [i]. Y = pictureBox1. Height / 2 + (int) Math. Round (D0 * (View [i]. y / View [i]. z));

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экранных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Scrn [i]. X = (int) Perspective [i]. X + pictureBox1. Width / 2;

Scrn [i]. Y = (int) Perspective [i]. Y + pictureBox1. Height / 2;

Рисунок 1 — ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экранных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2.2 Алгоритм удалСния Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС строится трСхмСрная модСль, Ρ‚ΠΎ ΠΈΠ·-Π·Π° этого Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ эффСкт пСрСкрытия Π³Ρ€Π°Π½Π΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, слСдуСт ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΡ†Π΅Π²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈ, Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ Π³Ρ€Π°Π½ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. Для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Ньюла-Ньюэла-Π‘Π°Π½Ρ‡Π°, ΠΈΠ½Π°Ρ‡Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ°. ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ°, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π³Ρ€Π°Π½Π΅ΠΉ ΠΏΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π΅, выводится с Π·Π°ΠΊΡ€Π°ΡΠΊΠΎΠΉ Π³Ρ€Π°Π½ΠΈ, начиная с Π΄Π°Π»ΡŒΠ½ΠΈΡ… Π³Ρ€Π°Π½Π΅ΠΉ. ΠŸΡ€ΠΈ этом Π³Ρ€Π°Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выводятся ΠΏΠΎΠ·ΠΆΠ΅, Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ собою Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ части Π±ΠΎΠ»Π΅Π΅ Π΄Π°Π»ΡŒΠ½ΠΈΡ… Π³Ρ€Π°Π½Π΅ΠΉ. Π§Π°ΡΡ‚ΡŒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‡Π°ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡΡ‚ранствС изобраТСния. Он Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ пСрспСктивноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных шагов:

1. упорядочСниС всСх ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ² Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΡ… Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ z-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ;

2. Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСх нСопрСдСлСнностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ z-ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²;

3. прорисовка ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°, производимая Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΈΡ… Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠ΅ΠΉ z-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

Для нахоТдСния срСднСго значСния ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Z, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ эту сумму Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½. Π­Ρ‚ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°. Π”Π°Π»Π΅Π΅ создадим массив, содСрТащий всС срСдниС значСния, ΠΈ ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Если Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ находится Π±Π»ΠΈΠΆΠ΅ ΠΊ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŽ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π³Ρ€Π°Π½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ значСния Z.

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ отличаСтся Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ простотой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ, ΠΊΠ°ΠΊ слСдствиС, нСдостаточно эффСктивСн. Π’ ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Ссли трСхмСрная сцСна состоит ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ количСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π²ΠΈΠ΄Π½Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Π΄Ρ€Π΅. А Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈΡ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΈ Π½Π΅ Ρ‚рСбуСтся. НСдостаток «Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ°» состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ всС ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Ρ‹.

2.3 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… ΠΈ Π½Π΅ Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ

Для сокращСния числа ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ, ΠΈ ΠΏΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹. Π‘Ρ€Π°Π·Ρƒ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ наша сцСна состоит ΠΈΠ· ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ, поэтому Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠ³Π»Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ взгляда ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΡŽ ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ располоТСниС Π³Ρ€Π°Π½Π΅ΠΉ, лицСвая ΠΎΠ½Π° ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅Ρ‚. ΠΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности находится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π΅Π· Π»ΡŽΠ±Ρ‹Π΅ Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ провСсти ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: N (Nx, Ny, Nz). Π’Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ повСрхности ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹: A (Ax, Ay, Az), B (Bx, By, Bz), C (Cx, Cy, Cz). Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ плоскости задаСтся Π² Π²ΠΈΠ΄Π΅:

Nx * X + Ny * Y + Nz * Z + d = 0.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ систСму ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ:

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Π΄Π°Π½Π½ΡƒΡŽ систСму Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 4Π₯4.

НайдСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС. Π’Π°ΠΊ ΠΊΠ°ΠΊ данная систСма ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π²Π΅Π½ 0. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Nx =, Ny =, Nz = .

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ d Π΄Π»Ρ опрСдСлСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄:

Nx = Ay (Bz — Cz) + By (Cz — Az) + Cy (Az — Bz);

Ny = Az (Bx — Cx) + Bz (Cx — Ax) + Cz (Ax — Bx);

Nz = Ax (By — Cy) + Bx (Cy — Ay) + Cx (Ay — By).

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ привСсти Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для опрСдСлСния косинуса ΡƒΠ³Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ, привСсти ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π³Ρ€Π°Π½ΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ сцСны Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ (Π½ΠΎ ΠΏΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡŽ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚).

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π°ΠΌ потрСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Nz. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅: Nz = Nz/ (ΠšΠΎΡ€Π΅Π½ΡŒ (Nx*Nx + Ny*Ny + Nz*Nz)).

Если Nz > 0, Ρ‚ΠΎ Π³Ρ€Π°Π½ΡŒ Π½Π΅ Π²ΠΈΠ΄Π½Π°, Ссли Nz < 0, Ρ‚ΠΎ Π³Ρ€Π°Π½ΡŒ Π²ΠΈΠ΄Π½Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½Π°Ρ Π½Π° ΡΡ†Π΅Π½Π΅ имССтся ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ всС Π³Ρ€Π°Π½ΠΈ, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΎΠ±Π° условия Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ видимости Π³Ρ€Π°Π½Π΅ΠΉ.

2.4 Закраска Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ простой ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния

Π’Π°ΠΊ ΠΊΠ°ΠΊ расчСт Π½ΠΎΡ€ΠΌΠ°Π»Π΅ΠΉ Π² Π½Π°ΡˆΠ΅ΠΉ сцСнС ΠΌΡ‹ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ, Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ освСщСниС ΠΊ Π½Π°ΡˆΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΡƒΠΆΠ΅ Π½Π΅ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Помимо освСщСнности Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠ΅ΡΡ повСрхности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Ρ€Π°Π½ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° (A, R, G, B) Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ. Π¦Π²Π΅Ρ‚ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ прозрачности Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Π½Ρ‹Π΅, Π½ΠΎ ΡΠΈΡΡ‚Π΅ΠΌΠ° Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΎΠ΄Π½Π°, поэтому Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ значСния Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»Π° для Π³Ρ€Π°Π½Π΅ΠΉ ΠΊΡƒΠ±Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ — 255, Π° Π΄Π»Ρ Π³Ρ€Π°Π½Π΅ΠΉ стакана значСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: 80 для Π±ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ, ΠΈ 100 для основания стакана. Π§Π΅ΠΌ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Nz Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Ρ‚ΡŒΡΡ ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅, Ρ‚Π΅ΠΌ мСньшС Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΡŽ ΠΈ Π»ΡƒΡ‡ΠΎΠΌ свСта ΠΈ Ρ‚Π΅ΠΌ соотвСтствСнно большС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π°.

Для закраски ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ закраски — FillPolygon. Данная функция заполняСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°, опрСдСляСмого массивом Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ†Π²Π΅Ρ‚ закраски. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ, Π½ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚Π½ΡƒΡŽ систСму освСщСния.

3. ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

3.1 Π’Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 3 ΡƒΠΊΠ°Π·Π°Π½Ρ‹ всС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π’Π°Π±Π»ΠΈΡ†Π° 3 — Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

int

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для цСлочислСнных вычислСний

double

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний

bool

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для логичСских ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

int []

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ массивов, хранящих Ρ†Π΅Π»Ρ‹Π΅ значСния (Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ², Π²Π΅Ρ€ΡˆΠΈΠ½)

double []

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ массивов, хранящих вСщСствСнныС числа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ массив, хранящий срСдниС значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для описания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½

ΠšΠ»Π°ΡΡΡ‹

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для возмоТности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

3.2 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рассмотрСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 4.

Π’Π°Π±Π»ΠΈΡ†Π° 4 — ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

Ѐункция

b

Класс Bitmap

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, опрСдСляСмыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ пиксСлСй

g

Класс Graphics

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ рисования

image

Класс Image

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Vertex

Point3D []

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ структуру ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½

View

Point3D []

Π’ΠΈΠ΄ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½

Scrn

Point []

Массив экранных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Perspective

Point []

Массив пСрспСктивных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

NZ

double []

Массив, содСрТащий всС значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ

Order

int []

Массив, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ порядок отобраТСния Π³Ρ€Π°Π½Π΅ΠΉ, порядковыС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ²

D

double []

Массив, хранящий срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Z ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ

Teta, Phi

double

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, хранящиС значСния ΡƒΠ³Π»ΠΎΠ²

nx, ny, nz

double

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ

R0

int

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ сцСны

D0

int

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ пСрспСктивы сцСны

mousePress

bool

ЛогичСская пСрСмСнная, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ

3.3 ОписаниС основных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Рассмотрим основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

1. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° «ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ». Главная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, созданиС ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ², вычислСниС срСдних Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z, Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ повСрхностСй ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния.

2. Ѐункция «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ». Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Ρ€Π°Π½ΠΈ ΠΏΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ массив упорядочСнных Π³Ρ€Π°Π½Π΅ΠΉ для отобраТСния.

3. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° «Π’ычислСниСНормали». ВычисляСт Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ массив с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ Z ΡΡ‚ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ.

4. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° «ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ». Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСрисовки сцСны.

5. Ѐункция «Flag». Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ». ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π³Ρ€Π°Π½ΠΈ для сравнСния.

3.4 Алгоритм взаимодСйствия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Рассмотрим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ взаимодСйствия Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° «ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ» вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ изобраТСния сцСны, данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° содСрТит Π² ΡΠ²ΠΎΠ΅ΠΌ Ρ‚Π΅Π»Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅Π‘Ρ†Π΅Π½Ρ‹». ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° «ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅Π‘Ρ†Π΅Π½Ρ‹» ΠΏΠΎΠΌΠΈΠΌΠΎ своих Π½Π°Π±ΠΎΡ€ΠΎΠ² дСйствий состоит ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ» ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «Π’ычислСниСНормали». Ѐункция «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ «Flag». Условная схСма взаимодСйствия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.

Рисунок 2 — Условная схСма взаимодСйствия ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

4. ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

4.1 ОписаниС интСрфСйса

ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сразу Π²ΠΈΠ΄ΠΈΡ‚ сцСну: стакан ΠΈ ΠΊΡƒΠ± ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ (рисунок 3).

Рисунок 3 — Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный интСрфСйс, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ заявлСно, Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ — Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (стакан) ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ (ΠΊΡƒΠ±). А Ρ‚Π°ΠΊΠΆΠ΅ надпись Π½Π° ΡΠ°ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ «Π‘# Alpha Blending» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚Π΅ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π°Π»ΡŒΡ„Π° смСшСнии. Окно прилоТСния нСльзя ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° прилоТСния Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ прилоТСния.

4.2 Руководство ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для подтвСрТдСния свойств Ρ‚Π΅Π», Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ для наблюдСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ свойствами Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ сцСны. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅ Ρ‚Π΅Π»ΠΎ, пСрСкрывая Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ, Π° Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ΅ Ρ‚Π΅Π»ΠΎ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, находящСгося с Π½ΠΈΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ сцСнС.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ ΠΈΡ… Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. ΠžΠ±Π·ΠΎΡ€ сцСны выполняСтся Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ, Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стрСлок ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. БистСма управлСния прСдставлСна Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 5.

Π’Π°Π±Π»ΠΈΡ†Π° 5 — УправлСния сцСной

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ управлСния

ДСйствиС

ΠœΡ‹ΡˆΡŒ

ЗаТатая Π›ΠšΠœ/ПКМ

ΠžΠ±Π·ΠΎΡ€ сцСны со Π²ΡΠ΅Ρ… ракурсов

Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ колСсика

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +/;

НаТатиС ПКМ

ΠŸΡ€ΠΈΠ²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ…ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°

Π’Π²Π΅Ρ€Ρ…

Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ сцСны Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π²Π²Π΅Ρ€Ρ…

Π’Π½ΠΈΠ·

Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ сцСны Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π²Π½ΠΈΠ·

Π’Π»Π΅Π²ΠΎ

Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ сцСны Π² Π»Π΅Π²ΡƒΡŽ сторону

Π’ΠΏΡ€Π°Π²ΠΎ

Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ сцСны Π² ΠΏΡ€Π°Π²ΡƒΡŽ сторону

Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹Ρ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΉ, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ систСму, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ся антивирусными систСмами ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС.

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмныС трСбования:

— ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Windows XP, Vista, 7 (ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ сWindows 8 нСизвСстна);

— ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой 1 Π“Π³Ρ† ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅;

— ΠžΠ—Π£ 512 Мб ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅;

— Π’ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ 128 Мб ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅;

— ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, ΠΌΡ‹ΡˆΡŒ.

4.3 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ°Ρ… 4−8.

Рисунок 4 — Π§Π°ΡΡ‚ΡŒ стакана скрыта Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ ΠΊΡƒΠ±ΠΎΠΌ

Рисунок 5 — Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΡƒΠ±Π° сквозь ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ стакан

Рисунок 6 — ΠšΡƒΠ± находится ΠΏΠΎΠ·Π°Π΄ΠΈ стакана

Рисунок 7 — ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ сцСны

Рисунок 8 — ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ сцСны

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сцСну, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² (ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ стакан ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΊΡƒΠ±) Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΠ½Π΅, Π·Π°ΠΌΠΎΡ‰Π΅Π½Π½Ρ‹ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. По Π·Π°Π΄Π°Π½ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свойства ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… Ρ‚Π΅Π» ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… Ρ‚Π΅Π», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ это ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹: Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ скрываСт Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°, Π° ΡΠΊΠ²ΠΎΠ·ΡŒ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΏΡ€ΠΈ любом ракурсС Π²ΠΈΠ΄Π΅Π½ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚.

Для получСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ряд Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прСобразования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ удалСния Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π»ΠΈΡ†Π΅Π²Ρ‹Π΅ ΠΈ Π½Π΅ Π»ΠΈΡ†Π΅Π²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…ности, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ закраски Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ простой ΠΌΠΎΠ΄Π΅Π»ΠΈ освСщСния, основанной Π½Π° Ρ€Π°Π½Π΅Π΅ вычислСнных значСниях Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ.

Π˜Ρ‚ΠΎΠ³ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ стало ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «C# Alpha Blending», наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»ΡŒΡ„Π°-смСшСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны посрСдством программирования Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня C#.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

1 ΠšΡƒΠ·Π½Π΅Ρ†ΠΎΠ²Π° Π•. А., Π›ΡƒΠΊΠΎΡˆΠΊΠΎΠ² М. М., ΠœΠ°ΠΉΠΎΡ€ΠΎΠ² И. Π‘. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Срная гСомСтрия ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°». [ВСкст] - Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: «ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ ГосударствСнный ВСхничСский УнивСрситСт», Π³. ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊ, 2006 Π³. — ΡΡ‚Ρ€.36;

2 ВикипСдия — Бвободная ЭнциклопСдия. [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ РСсурс] - Π Π΅ΠΆΠΈΠΌ доступа: http://ru. wikipedia.org/, свободный;

3 Иванов Π’. П., Π‘Π°Ρ‚Ρ€Π°ΠΊΠΎΠ² А. Π‘. ВрСхмСрная ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. [ВСкст] - Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: «Π Π°Π΄ΠΈΠΎ ΠΈ ΡΠ²ΡΠ·ΡŒ», ISBN 5−256−1 204−5, Π³. ΠœΠΎΡΠΊΠ²Π°, 1995 Π³. — ΡΡ‚Ρ€.224;

4 РодТСрс Π”., Адамс Π”ΠΆ. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ основы машинной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. [ВСкст] - Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: «ΠœΠΈΡ€», ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ с Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ, ISBN 5−03−2 143−4, Π³. ΠœΠΎΡΠΊΠ²Π°, 2001 Π³. — ΡΡ‚Ρ€.604.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

Листинг основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Листинг модуля Form1. cs

using System;

using System. Collections. Generic;

using System. componentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace WindowsFormsApplication1

{

// Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

public struct Point3D

{

public double x;

public double y;

public double z;

public Point3D (double x, double y, double z)

{

this. x = x;

this. y = y;

this. z = z;

}

}

public partial class Form1: Form

{

Bitmap b;

Graphics g;

Image image;

Point3D [] Vertex = new Point3D [48]; // Массив ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½ (x, y, z)

Point3D [] View = new Point3D [48]; // Массив Π²ΠΈΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Point [] Scrn = new Point [48]; // Массив экранных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Point [] Perspective = new Point [48]; // Массив пСрспСктивных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

double [] NZ = new double [27]; // Массив Π½ΠΎΡ€ΠΌΠ°Π»Π΅ΠΉ для освСщСния

int [] Order = new int [27]; // Массив порядка отобраТСния Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ

double [] D = new double [27]; // Массив, содСрТащий срСдниС значСния Z-Π³Ρ€Π°Π½Π΅ΠΉ

double Teta = Math. PI / 180; // Π£Π³ΠΎΠ» Ρ‚Π΅Ρ‚Π° = 45 градусов

double Phi = Math. PI / 180; // Π£Π³ΠΎΠ» Ρ„ΠΈ = 45 градусов

bool mousePress = false;

double sX = 0;

double sY = 0;

double nx, ny, nz;

int D0 = 500;

int R0 = 300;

public Form1 ()

{

InitializeComponent ();

this. MouseWheel += new MouseEventHandler (Form1_MouseWheel);

b = new Bitmap («Background. jpg»); // ЭкзСмпляр класса Bitmap

image = Image. FromFile («Background. jpg»); // Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

g = Graphics. FromImage (b); // Π—Π°Π΄Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ для рисования

}

// ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сцСны

void ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ()

{

g. DrawImage (image, 0, 0);

for (int i = 0; i < 48; i++)

{

// ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… Π² Π²ΠΈΠ΄ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

View [i]. x = 20 * (int) Math. Round (Vertex [i]. x * (-Math. Sin (Teta)) + Vertex [i]. y * Math. Cos (Teta));

View [i]. y = 20 * (int) Math. Round (Vertex [i]. x * (-Math. Cos (Phi) * Math. Cos (Teta)) — Vertex [i]. y * (Math. Cos (Phi) * Math. Sin (Teta)) + Vertex [i]. z * Math. Sin (Phi));

View [i]. z = - 20 * (int) Math. Round (Vertex [i]. x * (-Math. Sin (Phi) * Math. Cos (Teta)) — Vertex [i]. y * (Math. Sin (Phi) * Math. Sin (Teta)) — Vertex [i]. z * (Math. Cos (Phi)) + R0);

// ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Perspective [i]. X = pictureBox1. Width / 2 + (int) Math. Round (D0 * (View [i]. x / View [i]. z));

Perspective [i]. Y = pictureBox1. Height / 2 + (int) Math. Round (D0 * (View [i]. y / View [i]. z));

if (View [i]. z == 0)

{

Perspective [i]. X = 0;

Perspective [i]. Y = 0;

}

else

{

Perspective [i]. X = (int) (Math. Round (D0 * (View [i]. x / View [i]. z)));

Perspective [i]. Y = (int) (Math. Round (D0 * (View [i]. y / View [i]. z)));

}

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экранных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Scrn [i]. X = (int) Perspective [i]. X + pictureBox1. Width / 2;

Scrn [i]. Y = (int) Perspective [i]. Y + pictureBox1. Height / 2;

}

// Находим срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Z ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ

for (int i = 0; i < 19; i++)

{

D [i] = (View [i]. z + View [i + 20]. z + View [i + 21]. z + View [i + 1]. z) / 4;

}

// ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Π³Ρ€Π°Π½ΡŒ стакана

D = (View. z + View. z + View. z + View. z) / 4;

// Π“Ρ€Π°Π½ΡŒ — основаниС стакана

for (int i = 0; i < 19; i++)

{

D += View [i]. z / 20;

}

// Π“Ρ€Π°Π½ΠΈ ядовито-ΠΆΠ΅Π»Ρ‚ΠΎΠ³ΠΎ ΠΊΡƒΠ±Π°

D = (View. z + View. z + View. z + View. z) / 4;

D = (View. z + View. z + View. z + View. z) / 4;

D = (View. z + View. z + View. z + View. z) / 4;

D = (View. z + View. z + View. z + View. z) / 4;

D = (View. z + View. z + View. z + View. z) / 4;

D = (View. z + View. z + View. z + View. z) / 4;

// ЗаполняСм список Π³Ρ€Π°Π½Π΅ΠΉ

List Plane = new List ();

for (int i = 0; i < 19; i++)

{

Plane. Add (new Point [] { Scrn [i], Scrn [20 + i], Scrn [21 + i], Scrn [1 + i] });

}

Plane. Add (new Point [] { Scrn [19], Scrn [39], Scrn [20], Scrn });

Plane. Add (new Point [] {Scrn [0], Scrn [1], Scrn [2], Scrn [3], Scrn [4], Scrn [5], Scrn [6], Scrn [7], Scrn [8], Scrn [9], Scrn [10], Scrn [11], Scrn [12], Scrn [13], Scrn [14], Scrn [15], Scrn [16], Scrn [17], Scrn [18], Scrn });

// ΠšΡƒΠ± ядовито-ΠΆΠ΅Π»Ρ‚ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°

Plane. Add (new Point [] { Scrn [40], Scrn [41], Scrn [42], Scrn });

Plane. Add (new Point [] { Scrn [40], Scrn [44], Scrn [47], Scrn });

Plane. Add (new Point [] { Scrn [43], Scrn [47], Scrn [46], Scrn });

Plane. Add (new Point [] { Scrn [42], Scrn [46], Scrn [45], Scrn });

Plane. Add (new Point [] { Scrn [41], Scrn [45], Scrn [44], Scrn });

Plane. Add (new Point [] { Scrn [44], Scrn [45], Scrn [46], Scrn });

// Бписок Ρ†Π²Π΅Ρ‚ΠΎΠ² для Π³Ρ€Π°Π½Π΅ΠΉ сцСны

List PlaneColor = new List ()

{

Color. FromArgb (80, 208, 208, 208), // 1 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 2 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 3 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 4 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 5 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 6 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 7 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 8 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 9 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 10 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 11 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 12 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 13 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 14 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 15 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 16 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 17 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 18 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 19 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (80, 208, 208, 208), // 20 Π“Ρ€Π°Π½ΡŒ стакана

Color. FromArgb (100, 102, 102, 102), // 21 — основаниС стакана

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

Color. FromArgb (255, 204, 255, 0), // Π“Ρ€Π°Π½ΡŒ ΠΊΡƒΠ±Π°

};

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ (27, 0); // Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° 27 Π³Ρ€Π°Π½Π΅ΠΉ ΠΏΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π΅, начиная с 0-ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ ВычислСниСНормали (); // ВычислСниС Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΊ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ

for (int i = 0; i < 27; i++) // ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Π³Ρ€Π°Π½ΠΈ

{

if (NZ [Order [i]] >= 0) // Если Π³Ρ€Π°Π½ΡŒ Π½Π΅ Π²ΠΈΠ΄Π½Π°

{

int A = (int) ((double) PlaneColor [Order [i]]. A); // ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

int R = (int) ((double) PlaneColor [Order [i]]. R * NZ [Order [i]]); // ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ * ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ

int G = (int) ((double) PlaneColor [Order [i]]. G * NZ [Order [i]]); // Π—Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ * ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ

int B = (int) ((double) PlaneColor [Order [i]]. B * NZ [Order [i]]); // Π‘ΠΈΠ½ΠΈΠΉ Ρ†Π²Π΅Ρ‚ * ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ

Color Glass = Color. FromArgb (A, R, G, B); // Π—Π°Π΄Π°Π΅ΠΌ Ρ†Π²Π΅Ρ‚

g. FillPolygon (new SolidBrush (Glass), Plane [Order [i]]); // Закраска

}

if (NZ [Order [i]] <= 0) // Если Π³Ρ€Π°Π½ΡŒ Π²ΠΈΠ΄Π½Π°

{

int A = (int) Math. Abs (((double) PlaneColor [Order [i]]. A));

int R = (int) Math. Abs (((double) PlaneColor [Order [i]]. R * NZ [Order [i]]));

int G = (int) Math. Abs (((double) PlaneColor [Order [i]]. G * NZ [Order [i]]));

int B = (int) Math. Abs (((double) PlaneColor [Order [i]]. B * NZ [Order [i]]));

Color Glass = Color. FromArgb (A, R, G, B);

g. FillPolygon (new SolidBrush (Glass), Plane [Order [i]]);

}

}

}

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° нахоТдСния Π½ΠΎΡ€ΠΌΠ°Π»Π΅ΠΉ ΠΊ ΠΏΠΎΠ²Π΅Ρ€Ρ…ностям

void ВычислСниСНормали ()

{

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»Π΅ΠΉ ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ 19 граням стакана

for (int i = 0; i < 19; i++)

{

nx = View [i]. y * (View [i + 20]. z — View [i + 21]. z) + View [i + 20]. y * (View [i + 21]. z — View [i]. z) + View [i + 21]. y * (View [i]. z — View [i + 20]. z);

ny = View [i]. z * (View [i + 20]. x — View [i + 21]. x) + View [i + 20]. z * (View [i + 21]. x — View [i]. x) + View [i + 21]. z * (View [i]. x — View [i + 20]. x);

nz = View [i]. x * (View [i + 20]. y — View [i + 21]. y) + View [i + 20]. x * (View [i + 21]. y — View [i]. y) + View [i + 21]. x * (View [i]. y — View [i + 20]. y);

NZ [i] = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

}

// ΠΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊ 19-ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ (Π½Π΅ ΠΏΠΎΠ΄Π΄Π°Π΅Ρ‚ся Ρ†ΠΈΠΊΠ»Ρƒ)

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// ΠΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊ Π³Ρ€Π°Π½ΠΈ (основаниС стакана), Π³Ρ€Π°Π½ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ 10 Π²Π΅Ρ€ΡˆΠΈΠ½, взято 3 (0, 10, 19)

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 40, 41, 42

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 40, 44, 47

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 43, 47, 46

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 42, 46, 45

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 41, 45, 44

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

// 44, 45, 46

nx = View. y * (View. z — View. z) + View. y * (View. z — View. z) + View. y * (View. z — View. z);

ny = View. z * (View. x — View. x) + View. z * (View. x — View. x) + View. z * (View. x — View. x);

nz = View. x * (View. y — View. y) + View. x * (View. y — View. y) + View. x * (View. y — View. y);

NZ = nz / Math. Sqrt (nz * nz + ny * ny + nx * nx);

}

// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡƒΠ±Π°

void ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ()

{

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

pictureBox1. Image = b;

}

// ΠœΠ΅Ρ‚ΠΎΠ΄-Ρ„Π»Π°Π³

bool Flag (int i, int PlaneNumber, int [] Order)

{

bool flag = true; // Π€Π»Π°Π³ поднят

for (int j = 0; j < PlaneNumber; j++) // ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Π³Ρ€Π°Π½ΠΈ ΠΏΠΎ ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ

if (Order [j] == i) flag = false; // Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ порядка с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ

return flag; // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π°

}

// ΠœΠ΅Ρ‚ΠΎΠ΄ сортировки Π³Ρ€Π°Π½Π΅ΠΉ

void Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ (int PlanesCount, int PlaneNumber)

{

double k = 1000; // ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹

for (int i = 0; i < 27; i++) // ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС Π³Ρ€Π°Π½ΠΈ

{

if (Flag (i, PlaneNumber, Order)) //

if (D [i] < k) // Если ср. Π·Π½Π°Ρ‡. ΠΏΠΎ Z < показатСля Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹

{ // Ρ‚ΠΎ.

k = D [i]; // ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ равняСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ

Order [PlaneNumber] = i; // ЗаполнСния массива ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΡƒ располоТСния Π³Ρ€Π°Π½Π΅ΠΉ

}

}

PlanesCount — -; // УмСньшаСм количСство Π³Ρ€Π°Π½Π΅ΠΉ Π½Π° 1

PlaneNumber ++; // Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈ Π½Π° 1

if (PlanesCount > 0) // Если количСство Π³Ρ€Π°Π½Π΅ΠΉ > 0, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°Π“Ρ€Π°Π½Π΅ΠΉ (PlanesCount, PlaneNumber);

}

// Бобытия, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ прилоТСния

private void Form1_Load (object sender, EventArgs e)

{

Teta = 89.549 087;

Phi = 134.99 817;

Vertex = new Point3D (-50, — 50, 0); // A

Vertex = new Point3D (-48, — 50, — 15); // B

Vertex = new Point3D (-40, — 50, — 30); // C

Vertex = new Point3D (-28, — 50, — 42); // D

Vertex = new Point3D (-15, — 50, — 48); // E

Vertex = new Point3D (0, — 50, — 50); // F

Vertex = new Point3D (15, — 50, — 48); // G

Vertex = new Point3D (28, — 50, — 42); // H

Vertex = new Point3D (40, — 50, — 30); // I

Vertex = new Point3D (48, — 50, — 15); // J

Vertex = new Point3D (50, — 50, 0); // K

Vertex = new Point3D (48, — 50, 15); // L

Vertex = new Point3D (40, — 50, 30); // M

Vertex = new Point3D (28, — 50, 42); // N

Vertex = new Point3D (15, — 50, 48); // O

Vertex = new Point3D (0, — 50, 50); // P

Vertex = new Point3D (-15, — 50, 48); // R

Vertex = new Point3D (-28, — 50, 42); // S

Vertex = new Point3D (-40, — 50, 30); // T

Vertex = new Point3D (-48, — 50, 15); // U

// ВСрхняя ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ стакана

Vertex = new Point3D (-60, 100, 0); // A-1

Vertex = new Point3D (-58, 100, — 19); // B-1

Vertex = new Point3D (-48, 100, — 36); // C-1

Vertex = new Point3D (-35, 100, — 50); // D-1

Vertex = new Point3D (-18, 100, — 58); // E-1

Vertex = new Point3D (0, 100, — 60); // F-1

Vertex = new Point3D (18, 100, — 58); // G-1

Vertex = new Point3D (35, 100, — 50); // H-1

Vertex = new Point3D (48, 100, — 36); // I-1

Vertex = new Point3D (58, 100, — 19); // J-1

Vertex = new Point3D (60, 100, 0); // K-11

Vertex = new Point3D (58, 100, 19); // L-12

Vertex = new Point3D (48, 100, 36); // M-13

Vertex = new Point3D (35, 100, 50); // N-14

Vertex = new Point3D (18, 100, 58); // O-15

Vertex = new Point3D (0, 100, 60); // P-16

Vertex = new Point3D (-18, 100, 58); // R-17

Vertex = new Point3D (-35, 100, 50); // S-18

Vertex = new Point3D (-48, 100, 36); // T-19

Vertex = new Point3D (-58, 100, 19); // U-20

// Π―Π΄ΠΎΠ²ΠΈΡ‚ΠΎ-ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ ΠΊΡƒΠ± (Π° = 50)

// НиТняя Π³Ρ€Π°Π½ΡŒ

Vertex = new Point3D (-60, — 50, — 65); // A

Vertex = new Point3D (-60, — 50, — 115); // B

Vertex = new Point3D (-10, — 50, — 115); // C

Vertex = new Point3D (-10, — 50, — 65); // D

// ВСрхняя Π³Ρ€Π°Π½ΡŒ

Vertex = new Point3D (-60, 0, — 65); // A-1

Vertex = new Point3D (-60, 0, — 115); // B-1

Vertex = new Point3D (-10, 0, — 115); // C-1

Vertex = new Point3D (-10, 0, — 65); // D-1

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

// Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сцСной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш-стрСлок

private void Form1_KeyDown (object sender, KeyEventArgs e)

{

if (e. KeyCode == Keys. Up)

{

Phi = Phi + Math. PI / 128;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

if (e. KeyCode == Keys. Down)

{

Phi = Phi — Math. PI / 128;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

if (e. KeyCode == Keys. Right)

{

Teta = Teta + Math. PI / 128;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

if (e. KeyCode == Keys. Left)

{

Teta = Teta — Math. PI / 128;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

}

// Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сцСной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ΡˆΠΈ

private void pictureBox1_MouseMove (object sender, MouseEventArgs e)

{

if (mousePress)

{

if (e. X < sX)

{

Teta = Teta — Math. PI / 128;

sX = e. X;

}

if (e. X > sX)

{

Teta = Teta + Math. PI / 128;

sX = e. X;

}

if (e. Y > sY)

{

Phi = Phi — Math. PI / 128;

sY = e. Y;

}

if (e. Y < sY)

{

Phi = Phi + Math. PI / 128;

sY = e. Y;

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

}

// Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅, Π²ΠΎΡ…Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈ отпускании ΠΌΡ‹ΡˆΠΈ

private void pictureBox1_MouseUp (object sender, MouseEventArgs e)

{

mousePress = false;

}

// Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ

private void pictureBox1_MouseDown (object sender, MouseEventArgs e)

{

mousePress = true;

if (e. Button == MouseButtons. Right)

{

R0 = 300;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

}

// Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ΅ колСса ΠΌΡ‹ΡˆΠΈ

void Form1_MouseWheel (object sender, MouseEventArgs e)

{

if ((e. Delta == 120) && (R0! = 150))

{

R0 — = 5;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

else if ((e. Delta == - 120) && (R0! = 800))

{

R0 += 5;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΠ‘Ρ†Π΅Π½Ρƒ ();

}

}

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ