Жарков В.А. — Visual C++ 2005, DirectX 9.0c и M..


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте файл и откройте на своем компьютере.
ɬɟɯничɟɫкиɯ нɚɭк Ⱥлɟкɫɟɟɜич 681.3. ȻȻК 32.973 35 ISBN 5-94212-010-2 . Visual C++ 2005, DirectX 9.0c Microsoft Agent компьюɬɟɪной ɫɬɪɚниц книɝɚ ɭɪоɜня Visual C++ 2005 ноɜɟйшим ɫинɬɚкɫиɫом плɚɬɮоɪмы Visual Studio 2005, коɬоɪɭю ɬɟльɫɬɜо нɟпоɫɪɟɞɫɬɜɟнно коɪпоɪɚции Ɋɚзɪɚɛоɬɚны мɟɬоɞолоɝии ɜычиɫлиɬɟльныɯ ɫиɫɬɟм ɞɜɭɯмɟɪной ɬɪɟɯмɟɪной ɝɪɚɮики мɭльɬимɟɞиɚ ɚнимɚции мɭльɬип ликɚции ɚɭɞио оɫноɜɟ Visual C++ 2005 ноɜɟйшɟй нолоɝии DirectX 9.0c. ȼпɟɪɜыɟ миɪɟ пɪиɜɟɞɟны Visual C++, Visual Basic Visual C# 2002-2005 поɫɬɪоɟния ɭпɪɚɜлɟния ɪɚзнооɛɪɚзными ɬɪɟɯмɟɪными ɬɟлɚми ɜɟɪɯноɫɬями линиями ɭɪоɜнɟй поɜɟɪɯноɫɬɟй ɬɪɟɯмɟɪном ɫɬɪɚнɫɬɜɟ Мɭльɬимɟɞийныɟ пɪиложɟния оɫноɜɚны ɬɟɯнолоɝии Microsoft Agent, коɬоɪɚя ɫозɞɚɜɚɬь ɜключɚɬь Web- пɪиложɟния инɬɟɪɚкɬиɜныɟ комɚнɞы микɪоɮон ɚнимɚционныɟ пɟɪɫонɚжи ȼɫɟ ɬɚкжɟ компɚкɬ ɞиɫкɟ поɫɬɪоɟния ɜычиɫлиɬɟльныɯ ɝɪɚɮичɟɫкиɯ ɫиɫɬɟм иɫпользоɜɚнɚ инɬɟɝɪɚция Visual C++ Visual Visual C#, SQL Server 2005, Windows Media Player 10 Web- пɪоɝɪɚммиɪоɜɚниɟ Web- ɫлɭжɛы имɟющиɟ ɚнɚлоɝоɜ пɪоɝɪɚммы ɚнимɚции мɭльɬипликɚции концɟпции ɜизɭɚльноɝо пɪоɝɪɚммиɪоɜɚния пɪоɟкɬиɪоɜɚния пɪи мɟнɟния пɪɚкɬикɟ ɭчɟɛɟ нɚɭкɟ 3D ȼоɫпɪоизɜɟɞɟниɟ ɚɭɞио мɭльɬимɟɞиɚ ɭпɪɚɜлɟния ɋиɫɬɟмы мɚɬɟмɚɬики ɜычиɫлиɬɟльныɟ ɫиɫɬɟмы Ɋɚɫчɟɬы оɛъɟмɚ мɚɫɫы Опɬимɚльный ɪɚɫкɪой мɚɬɟɪиɚлоɜ Ⱥнɚлиɬичɟɫкоɟ чиɫлɟнноɟ ɬɟмɚɬичɟɫкоɟ моɞɟлиɪоɜɚниɟ Ɋɟшɟниɟ ɪɚɫчɟɬы мɟɬоɞом элɟмɟнɬоɜ компьюɬɟɪноɝо ɬɟɯпɪоцɟɫɫоɜ (CAD/CAM system). ɍпɪɭɝоɫɬь ɞɟɮоɪмиɪоɜɚния мɟɬоɞикɚ ɪɚзɪɚɛоɬɚнныɯ пɪоɝɪɚммы моɝɭɬ ɛыɬь ɜɫɬɚɜлɟны Visual Studio 2002-2005 ɝоɞоɜ Пɪɟɞнɚзнɚчɟнɚ ɜɫɟɯ ɛыɫɬɪо ноɜɟйший ɫоɜɪɟмɟн ɫоɜɟɪшɟнный мощный пɪоɝɪɚммиɪоɜɚния ɜыɫокоɝо ɭɪоɜня Visual C++ 2005 ɫɪɚзɭ поɫлɟɞниɯ ɜɟɪɫий 2002-2005 .....................................................................................................................10 ɋИНɌȺКɋИɋȺ ...........................................................................11 Ƚлɚɜɚ 1. Ȼɚзоɜыɟ ноɜом ɫинɬɚкɫиɫɟ Visual C++ 2005 оɫноɜныɟ ...........................................................................................................11 Ƚлɚɜɚ 2. ɪɚзɪɚɛоɬки пɪиложɟний ɜыполнɟния ɪɚɫчɟɬоɜ эɮɮɟкɬɚми ......................................................................................................12 Ƚлɚɜɚ 3. ɪɚзɪɚɛоɬки пɪиложɟний нɟɫколькиɯ ɮоɪмɚɯ .............16 ................................................................18 Ƚлɚɜɚ 4. ɫɜɟɞɟния ɝɪɚɮичɟɫкиɯ ɜозможноɫɬяɯ Visual Studio........18 Ƚлɚɜɚ 5. ɮоɪмɟ элɟмɟнɬɚɯ ɭпɪɚɜлɟния оɛщɚя пɟчɚɬи изоɛɪɚжɟний пɪинɬɟɪɟ ...............................................................19 Ƚлɚɜɚ 6. ɫложныɯ ɮоɪмɟ элɟмɟнɬɚɯ ɭпɪɚɜлɟния .......22 Ƚлɚɜɚ 7. зɚполнɟнныɯ ɮиɝɭɪ ɮоɪмɟ элɟмɟнɬɚɯ ɭпɪɚɜлɟния Ƚлɚɜɚ 8. ɬɟкɫɬɚ ......................................................................................25 ȺНИМȺЦИИ Ƚлɚɜɚ 9. ɫозɞɚния ɜычиɫлиɬɟльной ɫиɫɬɟмы ...................................26 Ƚлɚɜɚ 10. Ⱥɪиɮмɟɬичɟɫкиɟ ɜычиɫлɟния ..............................................................27 Ƚлɚɜɚ 11. Ɋɚзɪɚɛоɬкɚ ɫɬɚнɞɚɪɬноɝо кɚлькɭляɬоɪɚ ............................................29 Ƚлɚɜɚ 12. ȼычиɫлɟниɟ ..........................................................................33 Ƚлɚɜɚ 13. ɋɬɟпɟни лоɝɚɪиɮмы ɮɚкɬоɪиɚлы ......................................35 Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 ɋИɋɌȿМЫ .........................38 Ƚлɚɜɚ 14. Ⱥлɝоɪиɬмы оɝлɚɜлɟниɟ ɝɪɚɮичɟɫкой ɫиɫɬɟмы ..............................38 Ƚлɚɜɚ 15. Ƚɪɚɮик ɮɭнкции ..................................................................39 Ƚлɚɜɚ 16. Ƚɪɚɮики ɬипичныɯ ɮɭнкций ...............................................................48 Ƚлɚɜɚ 17. Ɋиɫоɜɚниɟ помощи пɟɪɟмɟщɟния мыши ....................................52 Ƚлɚɜɚ 18. Ɋиɫоɜɚниɟ линий помощи нɚжɚɬия мыши ..................54 Ƚлɚɜɚ 19. Ɋиɫоɜɚниɟ пɪямоɭɝольникоɜ эллипɫоɜ пɪи нɚжɚɬия мыши ....................................................................................................................56 Ƚлɚɜɚ 20. Ɋиɫоɜɚниɟ зɚполнɟнныɯ пɪямоɭɝольникоɜ эллипɫоɜ пɪи нɚжɚɬия ...................................................................................58 Ƚлɚɜɚ 21. Нɟпɪɟɪыɜный ɝɪɚɮик ɟɝо пɪоɜɟɪкɚ ɞиɫпɟɬчɟɪɚ зɚɞɚч ɮɚйлɚ поɞкɚчки .............................................................60 ɋИɋɌȿМЫ .........................62 Ƚлɚɜɚ 22. ɚлɝоɪиɬмы ɫиɫɬɟмы ..............................................................62 Ƚлɚɜɚ 23. Мɟɬоɞикɚ ɫозɞɚния ɝɪɚɮичɟɫкой ɫиɫɬɟмы оɫноɜɟ Visual C++ Visual Basic, Visual C# ɞɪɭɝими языкɚми ..........................................63 Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми ɬɪɟɯмɟɪном пɪоɫɬɪɚнɫɬɜɟ .....................................................................................................................64 Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми Visual Basic Visual C++, Visual C# ɞɪɭɝими .........................85 Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми Visual C# инɬɟɝɪɚции Visual C++, Visual Basic ɞɪɭɝими языкɚми .............................104 Ƚлɚɜɚ 27. Изоɛɪɚжɟниɟ оɛъɟкɬоɜ Visual C++ ɞɚнным ɞɪɭɝоɝо Visual C++, Visual Basic или Visual C#........................................................123 Ƚлɚɜɚ 28. Изоɛɪɚжɟниɟ оɛъɟкɬоɜ Visual C# ɞɚнным Visual C++, Visual Basic Visual C#........................................................................126 5 Ƚлɚɜɚ 29. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями ɬɪɟɯмɟɪном пɪоɫɬɪɚнɫɬɜɟ Visual C# инɬɟɝɪɚции Visual C++, Visual Basic ɞɪɭɝими языкɚми ...........................................................................................................................129 Ƚлɚɜɚ 30. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями ɬɪɟɯмɟɪном пɪоɫɬɪɚнɫɬɜɟ Visual Basic Visual C++, Visual C# ɞɪɭɝими языкɚми ...........................................................................................................................139 Ƚлɚɜɚ 31. Изоɛɪɚжɟниɟ поɜɟɪɯноɫɬɟй Visual C++ Visual C# или Visual Basic..............................................................................149 Ƚлɚɜɚ 32. Ɋɚɫчɟɬ ɭɪоɜня поɜɟɪɯноɫɬи Visual C# Visual C++, Visual Basic ɞɪɭɝими языкɚми ....................................152 Ƚлɚɜɚ 33. Ɋɚɫчɟɬ ɭɪоɜня поɜɟɪɯноɫɬи Visual Basic инɬɟɝɪɚции Visual C++, Visual C# ɞɪɭɝими языкɚми .................................158 Ƚлɚɜɚ 34. Изоɛɪɚжɟниɟ ɭɪоɜня Visual C++ пɪоɟкɬɚ Visual C# Visual Basic.........................................................164 Ƚлɚɜɚ 35. Изоɛɪɚжɟниɟ оɛъɟкɬоɜ Visual C++, Visual Basic Visual C++ компонɟнɬ клиɟнɬ ..........................................166 X..............................................................171 Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния нɟпоɞɜижныɯ плоɫкиɯ ɮиɝɭɪ .171 Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния нɟпоɞɜижныɯ ɮиɝɭɪ .............................................................................................187 AGENT ..................................204 Ƚлɚɜɚ 38. Зɚɝɪɭзкɚ ɭɫɬɚноɜкɚ компонɟнɬоɜ Microsoft Agent......................204 Ƚлɚɜɚ 39. Мɟɬоɞикɚ ɭпɪɚɜлɟния мɭльɬипликɚционными пɟɪɫонɚжɚми ....205 Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй .......215 Ƚлɚɜɚ 41. Мɟɬоɞикɚ ɫозɞɚния компьюɬɟɪныɯ мɭльɬɮильмоɜ ............226 Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Ƚлɚɜɚ 42. Пɪимɟɪ Инɬɟɪнɟɬ Microsoft Agent.................230 Ƚлɚɜɚ 43. Поɫɬɪоɟниɟ ɝɪɚɮикɚ ɬочкɚм экɫпɟɪимɟнɬɚ мɭльɬипликɚционными пɟɪɫонɚжɚми MS Agent.....................................................231 ȺНИМȺЦИИ .....237 Ƚлɚɜɚ 44. Оɝлɚɜлɟниɟ ɫиɫɬɟмы ɚнимɚции оɛъɟкɬоɜ .............237 Ƚлɚɜɚ 45. ȼɚɪиɚнɬы чɚɫоɜ циɮɪоɜой ɞɚɬой ...........................................................................................................238 Ƚлɚɜɚ 46. линии ...................................................................................241 Ƚлɚɜɚ 47. ɍпɪɚɜляɟмоɟ линии ...........................................................243 Ƚлɚɜɚ 48. ɍпɪɚɜляɟмоɟ ɮиɝɭɪы ............................245 Ƚлɚɜɚ 49. ɍпɪɚɜляɟмоɟ зɚполнɟниɟ ɮиɝɭɪ ........................................................248 Ƚлɚɜɚ 50. ɍпɪɚɜляɟмый миɝɚющий ɬɟкɫɬ .........................................................250 Ƚлɚɜɚ 51. Мɟɬоɞикɚ лɟɬɚющиɯ ................................251 Ƚлɚɜɚ 52. Мɟɬоɞикɚ ɚнимɚции ɝɪɚɞиɟнɬноɝо зɚполнɟния ɬɟкɫɬɚ ...258 Ƚлɚɜɚ 53. ȼɪɚщɚющɟɟɫя зɚполнɟниɟ ɮиɝɭɪ .................264 Ƚлɚɜɚ 54. Изоɛɪɚжɟниɟ кɪɭɝоɜ ɜоɞɟ иɫпользоɜɚниɟм ɞɜойной ɛɭɮɟɪизɚции ....................................................................................................................265 Ƚлɚɜɚ 55. Ⱥнимɚция ɬɟкɫɬɚ конɫольном пɪиложɟнии .................................268 КОНȼȿɊɌИɊОȼȺНИЯ ...................................................................................270 Ƚлɚɜɚ 56. Мɟɬоɞикɚ зɚɞɚния конɜɟɪɬиɪоɜɚния зɚмɟны .....270 Ƚлɚɜɚ 57. Мɟɬоɞикɚ ɪɚзɪɚɛоɬки мɭльɬипликɚции ..........................................273 Ƚлɚɜɚ 58. Ɋɚзɪɚɛоɬкɚ мɭльɬипликɚции помощи ɪиɫɭнкоɜ .......277 7 Ƚлɚɜɚ 59. Мɟɬоɞикɚ ɭпɪɚɜлɟния изоɛɪɚжɟния ....................................278 ȼОɋПɊОИЗȼȿȾȿНИȿ WMP 10................................................282 Ƚлɚɜɚ 60. Оɝлɚɜлɟниɟ Visual C++ Windows ayer................................................................................................................... ..282 Ƚлɚɜɚ 61. ȼоɫпɪоизɜɟɞɟниɟ ɚɭɞио ɮɚйлоɜ пɪиложɟния Visual C++.........283 Ƚлɚɜɚ 62. ȼоɫпɪоизɜɟɞɟниɟ ɮɚйлоɜ пɪиложɟния Visual C++.........284 WINDOWS EXPLORER, NOTEPAD, WORDPAD, CALCULATOR, Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Ƚлɚɜɚ 70. Конɫольноɟ пɪиложɟниɟ ɪɚɫчɟɬɚ мɚɫɫы ....................296 Ƚлɚɜɚ 71. ȼычиɫлɟниɟ мɚɫɫы пɪи ɮоɪмы ...........................299 VISUAL C++ ....................................303 Ƚлɚɜɚ 72. ȼɜоɞ ɫиɫɬɟмɭ ɫɜойɫɬɜ мɚɬɟɪиɚлоɜ ɞля изɝоɬоɜлɟния .303 Ƚлɚɜɚ 73. Мɚɬɟмɚɬичɟɫкоɟ оɛɪɚɛоɬки зɚɝоɬоɜки ɪɟшɟний ...............................................................................................304 Ƚлɚɜɚ 74. Мɚɬɟмɚɬичɟɫкоɟ оɛɪɚɛоɬки зɚɝоɬоɜки мɟɬоɞɚ конɟчныɯ элɟмɟнɬоɜ .........................................................................305 Ƚлɚɜɚ 75. Мɚɬɟмɚɬичɟɫкоɟ ɝɪɚɮикɚ ɬɟɯпɪоцɟɫɫоɜ ....................................................................................................................306 Ƚлɚɜɚ 76. Мɟɬоɞолоɝия ɭчɟɬɚ мɚɬɟɪиɚлɚ пɪоɟкɬиɪоɜɚнии ɬɟɯпɪоцɟɫɫɚ изɝоɬоɜлɟния .............................................................................307 Ƚлɚɜɚ 77. Мɟɬоɞолоɝия пɪоɟкɬиɪоɜɚния ɬɟɯпɪоцɟɫɫоɜ изɝоɬоɜлɟния коɪоɛчɚɬой ɮоɪмы .........................................................................................................308 ȼНȿȾɊȿНИЯ .................309 Ƚлɚɜɚ 78. ɪɚɫкɪоя мɚɬɟɪиɚлоɜ ...................................................309 Ƚлɚɜɚ 79. ɋиɫɬɟмɚ компьюɬɟɪноɝо пɪоɟкɬиɪоɜɚния ɬɟɯпɪоцɟɫɫоɜ ..............310 Ƚлɚɜɚ 80. Пɪоɟкɬиɪоɜɚниɟ зɚɝоɬоɜиɬɟльныɯ поɞɝоɬоɜки мɚɬɟɪиɚлɚ ........................................................................................................................312 Ƚлɚɜɚ 81. Пɪоɟкɬиɪоɜɚниɟ опɟɪɚций изɝоɬоɜлɟния зɚɝоɬоɜок ......................316 Ƚлɚɜɚ 82. Пɪоɟкɬиɪоɜɚниɟ опɟɪɚций оɛɪɚɛоɬки зɚɝоɬоɜок ...........................319 Ƚлɚɜɚ 83. Пɪоɟкɬиɪоɜɚниɟ ɮинишныɯ опɟɪɚций изɞɟлий ....321 ЗȺКȺЗЧИКɍ .......323 Ƚлɚɜɚ 84. Мɟɬоɞикɚ пɪиложɟния пользоɜɚɬɟлю .............................323 9 ..............................................................................................................324 ɫоɞɟɪжимоɝо компɚкɬ ɫɯɟмɚ иɫпользоɜɚния ...................325 лиɬɟɪɚɬɭɪы ................................................................................................326 пɟɪɜɚя Visual C++ 2005 ноɜɟйшим плɚɬɮоɪмы Visual Studio 2005, коɬоɪɭю изɞɚɬɟльɫɬɜо Жɚɪкоɜ полɭ нɟпоɫɪɟɞɫɬɜɟнно коɪпоɪɚции Microsoft ( ɋШȺ ɋɪɚзɭ оɬмɟɬим чɬо пɪоɝɪɚммы ɞɚнной книɝи пɪилɚɝɚɟмоɝо компɚкɬ ɪɚɛоɬɚюɬ плɚɬɮоɪмɟ Visual Studio 2005, поɫлɟ нɟɛольшоɝо ɪɟɞɚкɬиɪоɜɚния пɪɚɜилɚм пɟɪɜой моɝɭɬ ɪɚɛоɬɚɬь плɚɬɮоɪмɚɯ пɪɟɞыɞɭщиɯ Visual I. 1. Visual C++ 2005 компьюɬɟɪ ноɜɟйшɟй ɪɚзɪɚɛоɬки плɚɬɮоɪмы Visual Studio 2005 коɪпоɪɚция Microsoft ɮоɪмɭлиɪɭɟɬ ɬɪɟɛоɜɚния ɜиɞɟ ɬɚɛл Ɍɪɟɛоɜɚния компьюɬɟɪɭ Visual Studio 2005 Processor Minimum: 766 megahertz (MHz) Pentium processor Recommended: 1 gigahertz (GHz) Pentium processor recommended System Visual Studio 2005 can be installed on any of the following systems: Microsoft Windows 2003 Server Windows XP Professional Service Pack 1 RAM Minimum: 128 megabytes (MB) Recommended: 256 MB Hard Disk Without MSDN: 750 MB of available space required on system drive 2 gigabytes (GB) of available space required on installation drive With MSDN: 1.1 GB of available sp ace required on system drive 3.2 GB of available space required on installation drive CD or DVD Required Display Minimum: 800 x 600 256 colors Recommended: 1024x768 High Color 16-bit Smart Device Development ActiveSync 3.7.1 Mouse Microsoft mouse or compatible pointing device 2. 2.1. оɫноɜной ɬɪɟмя пɟɪɟмɟнными ȼɬоɪой ɜɚɪиɚнɬ пɟɪɟмɟнными ɜɚɪиɚнɬ оɞной пɟɪɟмɟнной Чɟɬɜɟɪɬый ɜɚɪиɚнɬ иɫпользоɜɚния пɟɪɟмɟнныɯ 2.2. Мɟɬоɞ ɞля зɚɞɚния инɬɟɪɜɚлɚ ɜɪɟмɟни Ƚлɚɜɚ 2. ɪɚзɪɚɛоɬки пɪиложɟний эɮɮɟкɬɚми ɚнимɚции 13 2.3. Коɞ ɫозɞɚния ȼɚɪиɚнɬ 1. myText = true; 2.4. Коɞ ɫозɞɚния ȼɚɪиɚнɬ 2. //N_Interval, � this-Text = " counter = 0; Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 2.5. Коɞ ɫозɞɚния ȼɚɪиɚнɬ 3. � timer1-Enabled = false; //N_Interval, � this-Text = " Ƚлɚɜɚ 2. ɪɚзɪɚɛоɬки пɪиложɟний эɮɮɟкɬɚми ɚнимɚции 15 // counter = 0; // // counter = counter + 1; 2.6. ɋɬɪокɚ оɫɬɚнɚɜлиɜɚющɚя ɚнимɚцию 2.7. ɋɬɪокɚ ɜозоɛноɜляющɚя ɚнимɚцию 2.8. Коɞ оɫɬɚноɜки ɜозоɛноɜлɟния � timer1-Enabled = false; OffOn = true; � timer1-Enabled = true; OffOn = false; 3. 3.1. Мɟɬоɞ button1_Click коɞом Form1. 3.2. ɋɬɪокɚ мɟɬоɞ ɞля Form2. 3.3. Коɞ ɛɟɝɭщɟɝо ɫлɟɜɚ нɚпɪɚɜо зɚɝолоɜкɚ Ƚлɚɜɚ 3. ɪɚзɪɚɛоɬки пɪиложɟний нɟɫколькиɯ ɮоɪмɚɯ 3.4. Коɞ ɛɟɝɭщɟɝо ɫпɪɚɜɚ зɚɝолоɜкɚ II. 4. коɝɞɚ пɪɟɞыɞɭщиɯ пɪоɫɬыɟ полɭчɟния ɪɚɫчɟɬныɯ пɟɪɟйɞɟм ɪɚзɪɚɛоɬкɟ оɫноɜныɯ мɟɬоɞоɜ инɬɟɪɮɟйɫ поɫлɟɞниɯ ɜɟɪɫияɯ опɟɪɚцион нɚпɪимɟɪ , Windows XP Windows Server 2003, ɪɚɛоɬɚ ɞɜɭɯмɟɪной (2D) ɬɪɟɯмɟɪной (3D) ɝɪɚɮикой плɚɬɮоɪмɚɯ Visual Studio .NET 2002, 2003, 2004 Visual Studio 2005 оɫноɜɚны иɫпользоɜɚнии инɬɟɪɮɟйɫɚ ɪойɫɬɜ ɝɪɚɮики GDI+ (Graphics Device Interface). Ключɟɜоɟ ɚнɝлийɫкоɟ Graphics ɞɚнной пɟɪɟɜоɞиɬɫя ɝɪɚɮикɚ . оɛознɚчɟнияɯ 2D 3D D яɜляɟɬɫя пɟɪɜой ɛɭкɜой ɚнɝлийɫкоɝо ɫлоɜɚ Dimension измɟɪɟниɟ ɫлоɜɭ оɫноɜной опɟɪɚɬоɪ пɪи оɛъяɜлɟнии пɟɪɟмɟнныɯ Dim ( Visual Basic) пɪоизо эɬоɝо ɫлоɜɚ GDI+ ɛольшиɯ кɚɬɟɝоɪии Ⱦɜɭɯмɟɪнɚя (2D) ɜɟкɬоɪнɚя ɝɪɚɮикɚ (Two-dimensional (2-D) vector graphics). Изоɛɪɚжɟния (Imaging). Ɍипоɝɪɚɮия (Typography). Кɪɚɬко ɪɚɫɫмоɬɪим кɚжɞɭю кɚɬɟɝоɪий Ⱦɜɭɯмɟɪнɚя ɝɪɚɮикɚ ɜɟкɬоɪнɚя ɝɪɚɮикɚ ɪиɫоɜɚниɟ пɪимиɬиɜоɜ кɪиɜыɯ ɪиɫɭнкоɜ коɬоɪыɟ опɪɟɞɟлɟны нɚɛоɪɚми кооɪɞинɚɬной ɫиɫɬɟмɟ Нɚпɪимɟɪ пɪямɚя опɪɟɞɟлɟнɚ конɟчными ɬочкɚми пɪямоɭɝольник опɪɟɞɟлɟн ɬочкой мɟɫɬоположɟниɟ ɜɟɪɯнɟɝо чиɫɟл ɞɚющиɯ шиɪинɭ ɜыɫоɬɭ Пɪоɫɬой ɪиɫоɜɚния опɪɟɞɟлɟн ɬочɟк коɬоɪыɟ ɫɜя пɪямыми зɚɞɚннɚя чɟɬыɪьмя GDI+ ɫоɞɟɪжиɬ ɫɬɪɭкɬɭɪы коɬоɪыɟ ɯɪɚняɬ инɮоɪмɚцию пɪимиɬиɜɚɯ нɟпоɫɪɟɞɫɬɜɟнно коɬоɪыɟ ɯɪɚняɬ инɮоɪмɚцию пɪимиɬиɜы ɛɭɞɭɬ нɚɪиɫоɜɚны ɮɚкɬичɟɫки ɪиɫɭнок ɫɬɪɭкɬɭɪɚ ɯɪɚниɬ мɟɫɬоположɟниɟ пɪямоɭɝольникɚ Pen ( Пɟɪо инɮоɪмɚцию шиɪинɟ Graphics ( Ƚɪɚɮикɚ ɫоɞɟɪжиɬ мɟɬоɞы ɬоɝо ɪиɫоɜɚɬь пɪямоɭɝольники ɞɪɭɝиɟ ɪиɫɭнки нɟɫколько клɚɫɫоɜ Brush ( ), коɬоɪыɟ ɯɪɚняɬ инɮоɪмɚцию зɚмкнɭɬыɟ ɪиɫɭнки цɜɟɬɚми пɚлиɬɪɚми 5. 5.1. Коɞ ɪиɫоɜɚния пɪямой 5.2. Коɞ ɪиɫоɜɚния кɪиɜыɯ линий Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 5.3. Коɞ ноɜом Visual C++ 2005 пɟчɚɬи изоɛɪɚжɟния 5.4. Коɞ пɪɟжнɟм Visual C++ (2002-2004 ɝоɞоɜ пɟчɚɬи Ƚлɚɜɚ 5. ɮоɪмɟ элɟмɟнɬɚɯ пɟчɚɬь 5.5. Коɞ Visual C# изоɛɪɚжɟния пɪинɬɟɪɟ printDocument1.Print(); 5.6. Коɞ пɟчɚɬи изоɛɪɚжɟния пɪинɬɟɪɟ 5.7. Коɞ Visual C++ 2005 ɞля изоɛɪɚжɟния 6. 6.1. Коɞ ɪиɫоɜɚния пɪямоɭɝольникɚ 6.2. Коɞ ɪиɫоɜɚния кɪиɜыɯ линий Ƚлɚɜɚ 6. ɫложныɯ пɟчɚɬь ɮоɪмы : �� e-Graphics-DrawLines(myPen1, myCurvePoints); myPen1, myPen2: � myPen1-Dispose(); � myPen2-Dispose(); 7. 7.1. Коɞ ɪиɫоɜɚния зɚполнɟнноɝо пɪямоɭɝольникɚ 7.2. ɋɬɪокɚ ɪиɫоɜɚния зɚполнɟнноɝо эллипɫɚ 8.1. Коɞ ɪиɫоɜɚния ɝоɪизонɬɚльноɝо ɬɟкɫɬɚ 8.2. ɋɬɪоки ɪиɫоɜɚния ɬɟкɫɬɚ x, y, myFormat); III. Visual C++ 9. 9.1. Коɞ пɟɪɟключɚɬɟля � radioButton3-Text = "&2. Calculator"; // � radioButton3-Text = ""; // myText = false; ɮɚйл Form3.h нɟоɛɯоɞимо нɚпиɫɚɬь чɚɫɬь ɜыполнɟния пɟɪɜой ɚɪиɮмɟɬичɟɫкой опɟɪɚции ɫложɟния поɫлɟ щɟлчкɚ пɟɪɜой кнопки знɚком ɪɚɜɟнɫɬɜɚ = Form3; щɟлкɚɟм кнопкɭ Пояɜляɟɬɫя Form3.h шɚɛлоном коɬоɪый Ⱥнɚлоɝично ɞɜɚжɞы щɟлкɚɟм ɜɬоɪɭю кнопкɭ Пояɜляɟɬɫя Form3.h шɚɛло ном коɬоɪый коɞ ɜмɟɫɬо зɚпиɫыɜɚɟм номɟɪɚ окон Ⱥнɚлоɝично ɞɜɚжɞы щɟлкɚɟм ɬɪɟɬью Пояɜляɟɬɫя Form3.h ном коɬоɪый ɬолько ɜычиɬɚния ножɟниɟ номɟɪɚ double a, b; Ⱥнɚлоɝично ɞɜɚжɞы щɟлкɚɟм поɫлɟɞнюю чɟɬɜɟɪɬɭю Form3.h шɚɛлоном коɬоɪый ɬолько ɭмножɟния чиɫɟл номɟɪɚ 10.1. Коɞ ɜыполнɟния Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Opacity.ToString()); 11. ɮɚйл Form5.h нɟоɛɯоɞимо чɚɫɬь ɜыполнɟния ɪɚɫчɟɬоɜ нɚпɪимɟɪ поɫлɟ ɝлоɛɚльныɟ пɟɪɟмɟнныɟ Чɬоɛы зɚпɪоɝɪɚммиɪоɜɚɬь ɜыполнɟниɟ пɟɪɜой пɪи помощи щɟлчкоɜ ɞɜɭɯ кнопок + = ( ɪиɫ . 11.1), щɟлкɚɟм пояɜиɜшийɫя шɚɛлон мɟɬоɞɚ коɞ Кɪɚɬко оɛъяɫним чɬо пɟɪɜой ɫɬɪокɟ пɟɪɜой опɟɪɚции ɭɫлоɜный Нɚпомним чɬо ɜɬоɪой ɫɬɪокɟ ɫчиɬыɜɚɟɬɫя ɫɜойɫɬɜом пɪɟоɛɪɚзоɜыɜɚɟɬɫя double мɟɬоɞом пɪиɫɜɚиɜɚɟɬɫя пɟɪɟмɟнной Number. textBox�1-Text = ""; окно очищɚɟɬɫя пɪɟɞыɞɭщɟɝо чɬоɛы ɜɪɭчнɭю ɫɬɪокɟ поɞɫкɚзкой : bool Sys- tem::Windows::Forms::Control::Focus(void)) пɪоɝɪɚммɚ ɪɚзмɟщɚɟɬ окнɟ кɭɪɫоɪ помощи мɟɬоɞɚ Focus(), окнɟ пɟɪɟɞ ɜɜоɞом ɜɬоɪоɝо чиɫлɚ пɪоɝɪɚммиɪоɜɚния опɟɪɚ щɟлкɚɟм = ( ɪиɫ шɚɛлон �number2 = Convert::ToDouble(textBox1-Text); number3 = Number + number2; �textBox1-Text = number3.ToString(); коɞɟ пɪи опɟɪɚɬоɪɚ ɜыполняɟɬɫя ɬолько поɫлɟ ɬоɝо пɪɟɞɜɚɪиɬɟльно +, пɪоɝɪɚммɚ пɪиɫɜоиɬ цɟлочиɫлɟнной пɟɪɟмɟнной 1, щɟлкнɟм =. Поɫколькɭ нɟɫколько опɟɪɚций ɞɚнноɝо ɜыполняюɬɫя поɫлɟ оɞной =, мɟɬоɞ эɬой кнопки поɫлɟɞɭющɟй ɜычиɬɚния ɞɜɚжɞы щɟлкɚɟм - ɪиɫ . 11.1) шɚɛлон мɟɬоɞɚ зɚпиɫыɜɚɟм Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 щɟлкɚɟм = ( ɪиɫ . 11.1) мɟɬоɞ эɬой пɪɟɞыɞɭщɟɝо коɞɚ �number2 = Convert::ToDouble(textBox1-Text); number3 = Number - number2; �textBox1-Text = number3.ToString(); Ⱥнɚлоɝично ɭмножɟния кнопкɭ * ( ɪиɫ . 11.1) ноɜоɝо зɚпиɫыɜɚɟм щɟлкɚɟм = ( ɪиɫ . 11.1) мɟɬоɞ эɬой пɪɟɞыɞɭщɟɝо коɞɚ �number2 = Convert::ToDouble(textBox1-Text); number3 = Number * number2; �textBox1-Text = number3.ToString(); Ⱥнɚлоɝично кнопкɭ / ( ɪиɫ . 11.1) ноɜоɝо мɟɬоɞɚ щɟлкɚɟм кнопкɭ = ( ɪиɫ . 11.1) мɟɬоɞ пɪɟɞы коɞɚ �number2 = Convert::ToDouble(textBox1-Text); number3 = Number / number2; �textBox1-Text = number3.ToString(); ɚлɝоɪиɬм 1/x пɪɟɞɭɫмɚɬɪиɜɚɟɬ ɬолько оɞин эɬой оɞной 1/x ( ɪиɫ пɪоɝɪɚммиɪоɜɚния 1/x ɞɜɚжɞы 1/x ( ɪиɫ . 11.1) ноɜоɝо зɚпиɫыɜɚɟм Чɬоɛы ɪɟшɚл ɫɬɚнɞɚɪɬныɯ зɚɞɚч пɪоцɟнɬы Ƚлɚɜɚ 11. Ɋɚзɪɚɛоɬкɚ ɫɬɚнɞɚɪɬноɝо кɚлькɭляɬоɪɚ кнопкɭ % ( . 11.1) шɚɛлон ноɜоɝо �number2 = Convert::ToDouble(textBox1-Text); �number2 = Convert::ToDouble(textBox1-Text); �number2 = Convert::ToDouble(textBox1-Text); �number2 = Convert::ToDouble(textBox1-Text); Пɪɚɜилɚ пɪоцɟнɬоɜ ɫɬɚнɞɚɪɬны нɚɫɬольноɝо Windows- пɪимɟɪы пɪоцɟнɬоɜ ɞɚнном ɜɬоɪом ɞɚны поɞɪоɛно пɪи ɫозɞɚнии ɬɪɟɬьɟɝо очиɫɬки окнɚ C ( ɪиɫ . 11.1) ноɜоɝо мɟɬоɞɚ оɛнɭлɟния ɞɜɚжɞы кнопкɭ Memory clearing MC ( ɪиɫ . 11.1) шɚɛлонɟ ноɜоɝо мɟɬоɞɚ оɛнɭляɟм пɟɪɟмɟннɭю Memory Чɬоɛы ɜызɜɚɬь окно ɫоɯɪɚнɟнноɟ кнопкɭ Memory recall MR ( ɪиɫ . 11.1) шɚɛлон мɟɬоɞɚ Чɬоɛы зɚнɟɫɬи кɚлькɭляɬоɪɚ зɚпиɫɚнноɟ окно щɟлкɚɟм Store to memory MS ( ɪиɫ . 11.1) шɚɛлон Чɬоɛы ɫложиɬь коɬоɪоɟ ɜиɞим окнɟ чиɫлом ɫоɯɪɚнɟнным ɞɜɚжɞы кнопкɭ Add to memory M+ ( ɪиɫ . 11.1) шɚɛлон ноɜоɝо мɟɬоɞɚ Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 11.1. Коɞ ɜыполнɟния // � this-BackColor = Color::Red; � this-BackColor = Color::Green; // myColor = false; ɮɚйл Form7.h нɟоɛɯоɞимо нɚпиɫɚɬь чɚɫɬь ɜыполнɟния ɪɚɫчɟɬоɜ ɪɟшɟния пɟɪɜой зɚɞɚчи пɪоцɟнɬы пɪи помощи пɟɪɜой кнопки = Form7) щɟлкɚɟм кнопкɭ ɪиɫ Form7.h шɚɛлоном коɬоɪый ɪɟшɟния ɜɬоɪой пɪоцɟнɬы пɪи помощи ɜɬоɪой кнопки знɚком Form7) щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 12.1). Form7.h шɚɛлоном коɬоɪый ɪɟшɟния зɚɞɚчи пɪоцɟнɬы пɪи помощи Form7) щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 12.1). Form7.h шɚɛлоном коɬоɪый ɪɟшɟния зɚɞɚчи пɪоцɟнɬы пɪи помощи чɟɬɜɟɪɬой = Form7) ɞɜɚжɞы ɪɟжимɟ пɪоɟкɬиɪоɜɚния 12.1). Пояɜляɟɬɫя Form7.h шɚɛлоном коɬоɪый ɪɟшɟния пяɬой пɪоцɟнɬы пɪи пяɬой кнопки Form7) щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 12.1). Form7.h шɚɛлоном коɬоɪый Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 12.1. Коɞ ɜыполнɟния � this-ForeColor = Drawing::Color::Black; � this-ForeColor = Drawing::Color::White; 13. ɮɚйл Form9.h нɟоɛɯоɞимо чɚɫɬь ɜыполнɟния ɪɚɫчɟɬоɜ ɜозɜɟɞɟния x ɪɚзличныɟ пɪи помощи пɟɪɜой кноп = Form9) щɟлкɚɟм кнопкɭ ɪиɫ . 13.1). Пояɜляɟɬɫя ɮɚйл Form9.h шɚɛлоном коɬоɪый x2 = Math::Pow(x,2); x3 = Math::Pow(x,3); x4 = Math::Exp(x); x5 = Math::Pow(10,x); x^y ( пɪи помощи = Form9) ɞɜɚжɞы щɟлкɚɟм ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 13.1). Пояɜля Form9.h ɞɪɭɝим шɚɛлоном коɬоɪый x2 = Math::Pow(x,y); ɜычиɫлɟния sqrt(x); x^(1/3); x^(1/y) пɪи помощи кнопки = Form9) ɞɜɚжɞы ɪиɫ . 13.1). Form9.h шɚɛлоном коɬоɪый x2 = Math::Sqrt(x); x3 = Math::Pow(x,c); �y = Convert::ToDouble(textBox6-Text); x4 = Math::Pow(x,c); Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 коɪня a^(x/y) ( пɪи помощи чɟɬɜɟɪɬой = Form9) ɪиɫ Form9.h шɚɛлоном коɬоɪый зɚпиɫыɜɚɟм �x = Convert::ToDouble(textBox1-Text); �y = Convert::ToDouble(textBox6-Text); �a = Convert::ToDouble(textBox11-Text); x4 = Math::Pow(a,c); лоɝɚɪиɮмоɜ или ln(x); log(x); log[y](x) ( пɪи пяɬой кнопки знɚком = Form9) ɪиɫ Form9.h шɚɛлоном коɬоɪый �y = Convert::ToDouble(textBox6-Text); x2 = Math::Log(x); x3 = Math::Log10(x); if (x!=0) x4 = Math::Log10(x); if (y!=0) x5 = Math::Log10(y); ɮɚкɬоɪиɚлоɜ n!, n цɟлоɟ положиɬɟльноɟ пɪи n=0, n!=1) пɪи помощи шɟɫɬой кнопки знɚком = Form9 кноп Ƚлɚɜɚ 13. ɋɬɟпɟни лоɝɚɪиɮмы ɮɚкɬоɪиɚлы ɪиɫ . 13.1). Пояɜляɟɬɫя ɮɚйл Form9.h шɚɛлоном коɬоɪый �n = Convert::ToInt32(textBox16-Text); if (n == 0) Fac = 1; if (n = 12) �textBox17-Text = Fac.ToString(); 13.1. Коɞ ɜыполнɟния myText = false; IV. 14. 14.1. Мɟɬоɞ ɜыполнɟния // // myColor = true; // myColor = false; 15.1. Мɟɬоɞ кнопки Graph. пɪоɝɪɚммной ɪɟɚлизɚции ɚлɝоɪиɬмɚ ɞɜɚжɞы знɚчок понɟнɬɚ Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния Пояɜляɟɬɫя шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий // if (myColor == false) { // // myColor = true; } else { // // myColor = false; } Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 15.2. Пɟɪɜɚя ɜышɟ шɚɛлонɚ pictureBox1_Paint Ƚлɚɜɚ 15. Ƚɪɚɮик ɮɭнкции Math::Abs(y_min); Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : ��e-Graphics-DrawLine(greenPen_x, //( "x"): // ( ) "y": float span_y = y_max - y_min; ( "y"): int N_step_grid_y = 20; // "y" //( 2 ): float step_grid_y; float step_grid_y_pix; : step_grid_y = (float) 2 / N_step_grid_y; step_grid_y_pix = step_grid_y * M_y; // Pen^ redPen = gcnew Pen(Color::Red, 1); ( ): int j_y; float y1, y1_pix; for (j_y = 1; j_y=(N_step_grid_y/2); j_y++) { : �� e-Graphics-DrawLine(redPen, -1 * M_x + O_x_pix, y1_pix, x_point_end_pix, y1_pix); ( ): for (j_y = 1; j_y=(N_step_grid_y / 2); j_y++) { y1_pix = O_y_pix - j_y * step_grid_y * M_y; // : �� e-Graphics-DrawLine(redPen, -1 * M_x + O_x_pix, y1_pix, x_point_end_pix, y1_pix); } "y" y= -1 y = 1: // "y" y = 1: float y_point_end, y_point_end_pix; y_point_end = 1; y_point_end_pix = y_point_end * M_y + O_y_pix; // 2: Pen^ greenPen_y = gcnew Pen(Color::Green, 2); : ��e-Graphics-DrawLine(greenPen_y, O_x_pix, -1 * M_y + O_y_pix, O_x_pix, y_point_end_pix); // ( "y"): // ( ) "x": Ƚлɚɜɚ 15. Ƚɪɚɮик ɮɭнкции float span_x = x_max - x_min; float p1 = 1; Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 O_x_pix - 40, O_y_pix - 23 + n * step_grid_y_pix); O_x_pix - 5, O_y_pix - 333); O_x_pix + 170, O_y_pix - 333); O_x_pix + 270, O_y_pix - 333); O_x_pix + 380, O_y_pix - 333); O_x_pix + 455, O_y_pix - 333); Ƚлɚɜɚ 15. Ƚɪɚɮик ɮɭнкции O_x_pix + 455, O_y_pix - 300); O_x_pix + 525, O_y_pix - 300); O_x_pix + 455, O_y_pix - 30); O_x_pix + 455, O_y_pix + 40); O_x_pix + 555, O_y_pix + 40); O_x_pix + 455, O_y_pix + 90); O_x_pix + 530, O_y_pix + 90); O_x_pix + 455, O_y_pix + 140); O_x_pix + 525, O_y_pix + 140); Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 15.5. Коɞ ɜыполнɟния // if (myText == false) { // // myText = true; } else { // Ƚлɚɜɚ 15. Ƚɪɚɮик ɮɭнкции � label1-Text = ""; // myText = false; } 16.1. Мɟɬоɞ оɛɪɚɛоɬки щɟлчкɚ кнопкɟ Graph. 16.2. Мɟɬоɞ ɜыполнɟния // if (myColor == false) { // // � groupBox1-ForeColor = Color::Black; // myColor = true; } else { // // � groupBox1-ForeColor = Color::White; Ƚлɚɜɚ 16. Ƚɪɚɮики ɬипичныɯ ɮɭнкций // myColor = false; } 16.3. Мɟɬоɞ ɜыполнɟния // if (myColor == false) { // � pictureBox1-BackColor = Color::Red; // myColor = true; } else { // � pictureBox1-BackColor = Color::Green; // myColor = false; } 16.4. Мɟɬоɞ кнопки Graph. Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 16.5. Мɟɬоɞ ɜыполнɟния // if (myColor == false) { // � label1-BackColor = Color::Yellow; // myColor = true; } else { // � label1-BackColor = Color::White; // myColor = false; } 16.6. Мɟɬоɞ ɜыполнɟния // if (myColor == false) { // � pictureBox1-ForeColor = Color::Black; // myColor = true; } else Ƚлɚɜɚ 16. Ƚɪɚɮики ɬипичныɯ ɮɭнкций { // � pictureBox1-ForeColor = Color::White; // myColor = false; } 17. 17.1. Оɛъяɜляɟм ɝлоɛɚльныɟ зɚпиɫыɜɚɟм public: int x_MouseMove, y_MouseMove; private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { } 17.2. Мɟɬоɞ Form1_MouseMove пɟɪɟмɟщɟния private: System::Void Form1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { // � Graphics^ g = this-CreateGraphics(); � x_MouseMove = e-X; Ƚлɚɜɚ 17. Ɋиɫоɜɚниɟ помощи пɟɪɟмɟщɟния мыши { // � g-DrawLine(myPen, x_MouseDown, y_MouseDown, } } 17.3. Мɟɬоɞ Form1_MouseUp оɫɜоɛожɞɟния private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { } 17.4. Мɟɬоɞ button1_Click ɫɬиɪɚния ɪиɫɭнкɚ 18. 18.1. Оɛъяɜляɟм ɝлоɛɚльныɟ зɚпиɫыɜɚɟм private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { // � Graphics^ g = this-CreateGraphics(); // � x_MouseDown_2 = e-X; { Ƚлɚɜɚ 18. Ɋиɫоɜɚниɟ линий помощи нɚжɚɬия мыши } { // � g-DrawLine(myPen, x_MouseDown_1, y_MouseDown_1, } 18.2. Мɟɬоɞ button1_Click ɫɬиɪɚния ɪиɫɭнкɚ 19. 19.1. Оɛъяɜляɟм ɝлоɛɚльныɟ зɚпиɫыɜɚɟм �x_MouseDown_1 = e-X; �y_MouseDown_1 = e-Y; 19.2. Мɟɬоɞ pictureBox1_MouseUp оɛɪɚɛоɬки оɬпɭɫкɚния �� e-X - x_MouseDown_1, e-Y - y_MouseDown_1); 19.3. Мɟɬоɞ button1_Click ɫɬиɪɚния ɪиɫɭнкɚ Ƚлɚɜɚ 19. Ɋиɫоɜɚниɟ пɪямоɭɝольникоɜ эллипɫоɜ пɪи ɪɟжимɟ ɜыполнɟния (Debug, Start Without Debugging) пɟɪɟмɟщɚɟм пɟɪɜɭю нɚжимɚɟм кнопкɭ пɟɪɟмɟщɚɟм ɜɬоɪɭю пɪи пɪямоɭɝольник Ⱥнɚлоɝично ɫɬɪоим ɟщɟ пɪямоɭɝольникоɜ ɪиɫ . 19.1). коɞɟ 19.2 ɜмɟɫɬо пɪямоɭɝольникɚ ɜɬоɪомɭ ɜɚɪиɚнɬɭ пɪоɝɪɚммы можɟм ɪиɫоɜɚɬь ɪиɫ . 19.2) ɚлɝоɪиɬмɭ Поɫлɟ кнопки 1 Enter, или Alt+1) чɬо нɚɪиɫоɜɚли можɟм ɪиɫоɜɚɬь 20. 20.1. Оɛъяɜляɟм ɝлоɛɚльныɟ зɚпиɫыɜɚɟм 20.2. Мɟɬоɞ pictureBox1_MouseUp оɛɪɚɛоɬки оɬпɭɫкɚния Ƚлɚɜɚ 20. Ɋиɫоɜɚниɟ зɚполнɟнныɯ пɪямоɭɝольникоɜ эллипɫоɜ 20.3. Мɟɬоɞ button1_Click ɫɬиɪɚния ɪиɫɭнкɚ ɪɟжимɟ ɜыполнɟния (Debug, Start Without Debugging): пɟɪɟмɟщɚɟм мыши ɬочкɭ пɟɪɟмɟщɚɟм мыши ɜɬоɪɭю ɬочкɭ кнопкɭ пɪи эɬом пɪɟɞыɞɭщɟй пɪямоɭɝольник линɟйномɭ ɝɪɚɞиɟнɬɭ зɚɞɚнными White Ⱥнɚлоɝично ɫɬɪоим ɟщɟ нɟɫколько пɪямоɭɝольникоɜ ɪиɫ . 20.1). коɞɟ 20.2 ɜмɟɫɬо пɪямоɭɝольникɚ эɬомɭ ɜɬоɪомɭ ɜɚɪиɚнɬɭ пɪоɝɪɚммы можɟм ɪиɫоɜɚɬь зɚполнɟнныɟ ɬомɭ линɟйномɭ ɝɪɚɞиɟнɬɭ ɪиɫ . 20.2. 1 Очиɫɬиɬь Alt+1) чɬо нɚɪиɫоɜɚли можɟм ɪиɫоɜɚɬь 21. 21.1. Пɟɪɟмɟнныɟ поɫɬɪоɟния ɝɪɚɮикɚ // Random^ myRandom = gcnew Random(); // y1 = y0 + k * x + b; // �if (y1 98.9) y1 = 98.9f; if (y1 0.999) y1 = 0.999f; Ƚлɚɜɚ 21. Нɟпɪɟɪыɜный ɝɪɚɮик ɟɝо пɪоɜɟɪкɚ // int i; for (i = 10; i = 100; i+=10) �myGraphics-DrawLine(myPen, �0, i, pictureBox1-Width, i); // // � myGraphics-Dispose(); 21.3. Мɟɬоɞ Timer1_Tick. �Bitmap^ myBitmap = gcnew Bitmap(pictureBox1-Width, �pictureBox1-Height); ��g-DrawImage(pictureBox1-Image, -dx, 0.0f); // V. ɪɚзɪɚɛоɬɚɟм мɟɬоɞолоɝию ɫозɞɚния поɫɬɪоɟния ɬɪɟɯмɟɪном пɪоɫɬɪɚнɫɬɜɟ шиɪоко ɪɚɫпɪоɫɬɪɚнɟнныɯ плоɫкиɯ пɪоɫɬɪɚнɫɬɜɟнныɯ ɝɟомɟɬɪичɟɫкиɯ оɛъɟкɬоɜ ɮиɝɭɪ поɜɟɪɯноɫɬɟй плоɫкоɫɬи поɜɟɪɯноɫɬи оɛъɟмныɟ ɬɟлɚ нɚпɪимɟɪ мноɝоɝɪɚнники ɝɟомɟɬɪичɟɫкиɟ ɬɟлɚ моɝɭɬ кɚкой ɞɟɬɚли конɫɬ ɪɭкции пɪи помощи коɬоɪоɝо оɛɪɚɛɚɬыɜɚɟɬɫя зɚɞɚннɚя зɚɝоɬоɜкɚ мɚɬɟɪиɚлɚ ɞоɫɬоинɫɬɜо мɟɬоɞолоɝии чɬо ɞɚнной ɫпɪоɟкɬиɪɭɟм ɬипичныɟ пɪиложɟния поɫɬɪоɟния ɪɚзличныɯ пɪоɫɬɪɚн изоɛɪɚжɟний ɬолько оɞной оɬкɪыɬой поɫлɟɞнɟй ɜɟɪɫии Visual Studio 2005 ( иɫпользоɜɚния зɚкɪыɬыɯ поɛочныɯ ɛиɛлиоɬɟк DirectX OpenGL, коɬоɪыɟ ɬомɭ очɟнь ɫложны ɫлɟɞɭющɟй чɚɫɬи ɫпɪоɟкɬиɪɭɟм пɪоɫɬɪɚнɫɬɜɟнныɟ изоɛɪɚжɟния ɛɚзɟ VC++ 2005 DirectX 9.0c. Чɬоɛы экɪɚнɟ мониɬоɪɚ оɬоɛɪɚзиɬь оɛъɟкɬ ɞолжны ɪиɫ . 22.1): E (E пɟɪɜɚя оɞноɝо ключɟɜыɯ ɞɚнной ɬɟоɪии Eye )); оɛъɟкɬ коɬоɪый P покɚзɚнɚ ɪиɫ . 22.1 (P ɚнɝлийɫкоɝо Point ɬочкɚ мониɬоɪɚ эɬом экɪɚнɟ ɬочкɭ P ɜиɞим ɬочкɟ экɪɚнɚ нɚɯоɞиɬɫя пɟɪɟɫɟчɟнии пɪямой EP плоɫкоɫɬью экɪɚнɚ Оɬмɟɬим чɬо пɪиɜоɞим ɫлоɜɚ ɞɚнной ɛыло ɪɚзоɛɪɚɬьɫя ɫложными пɪоɝɪɚммɚми 2005, Visual Basic Visual C#, имɟнɚ пɟɪɟмɟнныɯ пɪоцɟɞɭɪ элɟмɟнɬоɜ пɪоɝɪɚммиɪоɜɚния зɚпиɫɚны иɫпользоɜɚниɟм ключɟɜыɯ ɬɪɟɯмɟɪном пɪоɫɬɪɚнɫɬɜɟ ɜɜоɞим нɟпоɞɜижнɭю пɪɚɜɭю пɪямоɭɝольнɭю кооɪɞинɚɬ x, y, z, ɬɚкжɟ ɫɮɟɪичɟɫкɭю кооɪɞинɚɬ r, ɪиɫ . 22.2), коɬоɪой опɪɟɞɟляюɬɫя положɟния ɪɚзмɟɪы ɬочки экɪɚнɚ пɪямоɭɝольнɚя кооɪɞинɚɬ ɪɚзномɭ нɚпɪи ɝлоɛɚльной (global coordinates) миɪоɜой (world coordinates) оɬличиɟ (local coordinates). ɝлоɛɚльнɭю кооɪɞинɚɬ зɚɞɚɬь нɚпɪимɟɪ цɟнɬɪɟ изоɛɪɚжɚɟмоɝо 23. Visual C++ ɫозɞɚнии оɛъɟкɬɚ клɚɫɫɚ коɞɟ нɚпɪимɟɪ циклоɜ зɚпиɫи myArrayVB(i, j) ɫɜойɫɬɜɚ ɞɪɭɝиɟ пɪоɝɪɚммиɪоɜɚния чиɫлɟ . 23.3). 24. 24.1. Коɞ мɟɬоɞɚ Form1_Load Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 { : Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми System::Windows::Forms::CheckState::Checked) System::Drawing::Color::Green, false); } DrawSolid(bmp, Dodecahedron, Icosahedron_first - 1, System::Drawing::Color::Blue, false); { DrawSolid(bmp, Icosahedron_first, Icosahedron_last, System::Windows::Forms::CheckState::Checked) { Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // (Cube): Cube = NumLines + 1; DesigningLine(-1, 1, -1, 1, 1, -1); DesigningLine(1, 1, -1, 1, -1, -1); DesigningLine(1, 1, 1, 1, -1, 1); DesigningLine(1, -1, 1, -1, -1, 1); DesigningLine(1, -1, -1, 1, -1, 1); // (Octahedron): Octahedron = NumLines + 1; DesigningLine(0, 1, 0, 0, 0, 1); DesigningLine(0, 1, 0, 0, 0, -1); DesigningLine(0, -1, 0, 0, 0, -1); DesigningLine(0, 0, 1, 1, 0, 0); // (Dodecahedron): Dodecahedron = NumLines + 1; Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми DesigningLine(C, 1, A, D, 1, B); DesigningLine(C, 1, -A, R, 1, 0); DesigningLine(R, 1, 0, X, 1 - Y, 0); DesigningLine(D, 1, -B, X * c2, 1 - Y, -X * s2); DesigningLine(X, 1 - Y, 0, -X * c2, 1 - y2, -X * s2); DesigningLine(X * c1, 1 - Y, X * s1, -X * c1, 1 - y2, X * s1); DesigningLine(X * c2, 1 - Y, -X * s2, -X, 1 - y2, 0); DesigningLine(X * c2, 1 - Y, -X * s2, DesigningLine(X * c1, 1 - Y, -X * s1, -X * c2, 1 - y2, -X * s2); DesigningLine(-D, -1, -B, -X * c2, 1 - y2, -X * s2); DesigningLine(-C, -1, -A, -X * c1, 1 - y2, -X * s1); DesigningLine(-D, -1, -B, -C, -1, -A); DesigningLine(-C, -1, -A, -R, -1, 0); (Icosahedron): Icosahedron_first = NumLines + 1; Math::Sqrt(3.0 / 4.0 * (2.0 - 2.0 * c1) - 2.0 * c2 - c2 * c2 - 1.0))); DesigningLine(R, H, 0, C, H, A); DesigningLine(C, H, A, D, H, B); Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 DesigningLine(C, H, -A, R, H, 0); DesigningLine(D, H, B, 0, 1, 0); DesigningLine(D, H, -B, 0, 1, 0); DesigningLine(-D, -H, B, -D, -H, -B); DesigningLine(-D, -H, -B, -C, -H, -A); DesigningLine(-D, -H, B, 0, -1, 0); DesigningLine(-D, -H, -B, 0, -1, 0); DesigningLine(C, H, A, -D, -H, B); DesigningLine(C, H, A, -C, -H, A); DesigningLine(D, H, -B, -C, -H, -A); DesigningLine(C, H, -A, -C, -H, -A); // Line : public: value struct Line (points): loa;&#xt000; public: arrayfloat^ fr_points; loa;&#xt000; public: arrayfloat^ to_points; // : //(transformed (tr) points): // , . // 0: public: void Initialize() loa;&#xt000; to_points = gcnew arrayfloat(5); loa;&#xt000; fr_tr_points = gcnew arrayfloat(5); Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми }; Lines Line, gcnew // 100 , // . nullptr: &#xLine;&#xLine;public: static arrayLine^ Lines = gcnew arrayLine(100); : public: int static NumLines = 0; (x1,y1,z1),(x2,y2,z2): public: void DesigningLine(float x1, float y1, float z1, NumLines = NumLines + 1; // : Lines[NumLines].Initialize(); Lines[NumLines].fr_points[3] = z1; Lines[NumLines].fr_points[4] = 1; Lines[NumLines].to_points[4] = 1; } (translation matrix) // , MatrixApplyFull. // 0, 0, 0, 1 : loa;&#xt,20;public: void TransformAllDataFull(arrayfloat,2^ M) { (translation matrix) // , MatrixApplyFull. // 0, 0, 0, 1 : loa;&#xt,20;public: void TransformDataFull(arrayfloat,2^ M, for (int i = line1; i = line2; i++) { Lines[i].to_tr_points); } Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : public: void DrawSolid(Bitmap^ bmp, float x1, y1, x2, y2; Graphics^ g; Pen^ pen; , , 2 //( Designing): pen = gcnew Pen(color, 2); // g bmp: g = Graphics::FromImage(bmp); : for (int i = first_line; i = last_line; i++) { x1 = Lines[i].fr_tr_points[1]; // , : � g-DrawLine(pen, �� bmp-Height / 2.0F - (y2 * bmp-Height / 4)); } g �� g-Dispose(); pen-Dispose(); // : loa;&#xt,20;public: void MatrixIdentity(arrayfloat,2^ M) for (int j = 1; j = 4; j++) { } } (3-D transformation matrix) // z x,y // ( ) // (0, 0, Distance): loa;&#xt,20;public: void MatrixPerspectiveXZ(arrayfloat,2^ M, Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми MatrixIdentity(M); // (3-D transformation matrix) // : // (cx, cy, cz), (fx, fy, fx), // &#xux, ;&#xyx, ;&#xuz00; UP ux, yx, uz, // (type_of_projection): //PerspectiveProjection ParallelProjection: loa;&#xt,20;public: void MatrixTransformation(arrayfloat,2^ M, float ux, float uy, float uz) { loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M4 = gcnew arrayfloat,2(5, 5); loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M5 = gcnew arrayfloat,2(5, 5); float sin1 = 0, cos1 = 0; float sin2 = 0, cos2 = 0; float sin3, cos3; float A, B, C; float d1, d2, d3; ( ) : MatrixTranslate( M1, -Fx, -Fy, -Fz); A = Cx - Fx; B = Cy - Fy; C = Cz - Fz; sin1 = -A / d1; cos1 = C / d1; } sin2 = B / d2; cos2 = d1 / d2; } y, // : MatrixIdentity(M2); // d1 = 0, // y : if (d1 != 0) Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 M2[1, 1] = cos1; M2[1, 3] = -sin1; // x, // z: MatrixIdentity(M3); d2 = 0, // . // : if (d2 != 0) } // UP: up1[1] = ux; up1[2] = uy; up1[3] = uz; MatrixApply( up2, M3, up1); // z, UP : d3 = (float)Math::Sqrt(up1[1] * up1[1] + MatrixIdentity( M4); // d3 = 0, UP : if (d3 != 0) M4[1, 1] = cos3; M4[1, 2] = sin3; M4[2, 1] = -sin3; M4[2, 2] = cos3; : if (type_of_projection == PerspectiveProjection) MatrixPerspectiveXZ( M5, d2); else else MatrixIdentity( M5); : m3MatMultiply( M12, M1, M2); m3MatMultiply( M1234, M12, M34); if (type_of_projection == PerspectiveProjection) Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми m3MatMultiply( M, M1234, M5); (3-D transformation matrix) // (perspective projection): // Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M12 = gcnew arrayfloat,2(5, 5); loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M56 = gcnew arrayfloat,2(5, 5); loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M567 = gcnew arrayfloat,2(5, 5); : MatrixTranslate( T, -p1, -p2, -p3); // z, // : MatrixIdentity( R1); R1[2, 1] = -R1[1, 2]; R1[2, 2] = R1[1, 1]; MatrixIdentity( R1i); x, y: MatrixIdentity( r2); L = (float)Math::Sqrt(n1 * n1 + n2 * n2 + n3 * n3); R2i[2, 2] = r2[2, 2]; R2i[2, 3] = -r2[2, 3]; R2i[3, 2] = -r2[3, 2]; R2i[3, 3] = r2[3, 3]; x-z : MatrixIdentity( S); S[2, 2] = -1; : m3MatMultiply( M12, T, R1); m3MatMultiply( M34, r2, S); m3MatMultiply( M, M1234, M567); } Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми . loa;&#xt,20; arrayfloat,2^ R1 = 1. loa;&#xt,20; arrayfloat,2^ r2 = loa;&#xt,20; gcnew arrayfloat,2(5, 5); // 2. loa;&#xt,20; arrayfloat,2^ Rot3 = . loa;&#xt,20; arrayfloat,2^ R2i = 2. loa;&#xt,20; arrayfloat,2^ R1i = loa;&#xt,20; gcnew arrayfloat,2(5, 5); // 1. loa;&#xt,20; arrayfloat,2^ Ti = . float D, L; loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M12 = gcnew arrayfloat,2(5, 5); loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ M34 = gcnew arrayfloat,2(5, 5); // : MatrixTranslate( T, -p1, -p2, -p3); z, // : MatrixIdentity( R1); D = (float)Math::Sqrt(d1 * d1 + d2 * d2); R1i[1, 1] = R1[1, 1]; R1i[1, 2] = -R1[1, 2]; R1i[2, 1] = -R1[2, 1]; R1i[2, 2] = R1[2, 2]; x, y: MatrixIdentity( r2); r2[2, 2] = D / L; r2[2, 3] = -d3 / L; r2[3, 2] = -r2[2, 3]; r2[3, 3] = r2[2, 2]; // ( y): Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 } (3-D transformation matrix) // Tx, Ty, Tz: loa;&#xt,20;public: void MatrixTranslate( arrayfloat,2^ M, float Tx, float Ty, float Tz) } // (3-D transformation matrix) // y ( - ): Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми : Result[3] = Single::MaxValue; } // : loa;&#xt000;public: void MatrixApply(arrayfloat^ V, Result[1] = V[1] * M[1, 1] + V[2] * M[2, 1] + V[3] * M[3, 1] + M[4, 1]; V[3] * M[3, 3] + M[4, 3]; Result[4] = 1; . // 0, 0, 0, 1 : loa;&#xt,20;public: void m3MatMultiplyFull(arrayfloat,2^ Result, loa;&#xt,20;loa;&#xt,20;arrayfloat,2^ A, arrayfloat,2^ B) { for (j = 1; j = 4; j++) value = value + A[i, k] * B[k, j]; Result[i, j] = value; // : Result[1, 1] = A[1, 1] * B[1, 1] + A[1, 2] * B[2, 1] + A[1, 3] * B[3, 1]; + A[1, 3] * B[3, 3]; Result[1, 4] = 0; Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Result[2, 2] = A[2, 1] * B[1, 2] + A[2, 2] * B[2, 2] + A[2, 3] * B[3, 2]; Result[2, 3] = A[2, 1] * B[1, 3] + A[2, 2] * B[2, 3] + A[2, 3] * B[3, 3]; Result[2, 4] = 0; Result[3, 1] = A[3, 1] * B[1, 1] + A[3, 2] * B[2, 1] + A[3, 3] * B[3, 1]; Result[3, 2] = A[3, 1] * B[1, 2] + A[3, 2] * B[2, 2] + A[3, 3] * B[3, 2]; Result[3, 3] = A[3, 1] * B[1, 3] + A[3, 2] * B[2, 3] + A[3, 3] * B[3, 3]; Result[3, 4] = 0; Result[4, 1] = A[4, 1] * B[1, 1] + A[4, 2] * B[2, 1] + A[4, 3] * B[3, 1] + B[4, 1]; Result[4, 2] = A[4, 1] * B[1, 2] + A[4, 2] * B[2, 2] + A[4, 3] * B[3, 2] + B[4, 2]; Result[4, 3] = A[4, 1] * B[1, 3] + A[4, 2] * B[2, 3] + A[4, 3] * B[3, 3] + B[4, 3]; Result[4, 4] = 1; } Лиɫɬинɝ 24.5. Пɟɪɟɞɚчɚ ɞɚнныɯ оɛъɟкɬоɜ ɮɚйл Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми // myArray[i, j] float, // i = 0,1,2,3,...,(N_x-1); j = 0,1,2,3,...,(N_y-1): loa;&#xt,20;loa;&#xt,20; arrayfloat,2^ myArray = gcnew arrayfloat,2(N_x, N_y); // myArray: int N_1_myArray; myArray(i, j) // : i = -1; // . for (k = first_line; k = last_line; k++) { y2 = Lines[k].to_tr_points[2]; // : � //g-DrawLine(pen, �� // (x2 * bmp-Width / 4) + bmp-Width / 2.0F, �� // bmp-Height / 2.0F - (y2 * bmp-Height / 4)); : �� x1 = (x1 * bmp-Width / 4) + bmp-Width / 2.0F; �� x2 = (x2 * bmp-Width / 4) + bmp-Width / 2.0F; �� y2 = bmp-Height / 2.0F - (y2 * bmp-Height / 4); : i = i + 2; myArray[i, 1] = y1; myArray[i + 1, 0] = x2; . } N_first_line N_last_line // myArray: int N_first_line, N_last_line; // N_first_line // N_last_line myArray[0, 0] = N_first_line; // myArray[200, 2]. i = -1; Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 i = i + 2; x2 = myArray[i + 1, 0]; y2 = myArray[i + 1, 1]; myArray[200, 1] . // sw StreamWriter D:\\MyDocs\\MyTest3D_Graphics.txt: if (N_Graphics == 1) StreamWriter("D:\\MyDocs\\MyTest3D_Graphics.txt"); // myArray[i, j] // WriteLine: for (i = 0; i = N_x-1; i++) � sw-WriteLine(myArray[i, j]); � sw-Close(); DrawSolid // // 2- 2- M_End: if (N_Graphics == 1) goto M_End; . // 2- myArray_2(i, j): int N_x_2 = 200; myArray_2(i, j) Single, // i = 0,1,2,3,...,(N_x-1); j = 0,1,2,3,...,(N_y-1): loa;&#xt,20; arrayfloat,2^ myArray_2 = loa;&#xt,20; gcnew arrayfloat,2(N_x_2, N_y_2); myArray_2: int N_1_myArray_2; myArray_2(i, j) // : i = -1; // . for (k = first_line; k = last_line; k++) y1 = Lines[k].fr_tr_points[2]; x2 = Lines[k].to_tr_points[1]; Ƚлɚɜɚ 24. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ ɬɪɟɯмɟɪными оɛъɟкɬɚми : � //g-DrawLine(pen, �� // (x2 * bmp-Width / 4) + bmp-Width / 2.0F, �� // bmp-Height / 2.0F - (y2 * bmp-Height / 4)); : �� x1 = (x1 * bmp-Width / 4) + bmp-Width / 2.0F; �� x2 = (x2 * bmp-Width / 4) + bmp-Width / 2.0F; �� y2 = bmp-Height / 2.0F - (y2 * bmp-Height / 4); : i = i + 2; myArray_2[i, 1] = y1; myArray_2[i + 1, 0] = x2; . } // N_first_line_2 N_last_line_2 // myArray_2: int N_first_line_2, N_last_line_2; // N_first_line_2 // N_last_line_2 myArray_2[0, 0] = N_first_line_2; // myArray_2[200, 1]: i = -1; x1 = myArray_2[i, 0]; y1 = myArray_2[i, 1]; } // myArray_2(200, 1) . // sw_2 StreamWriter D:\\MyDocs\\MyTest3D_Graphics_2.txt: StreamWriter^ sw_2 = gcnew StreamWriter("D:\\MyDocs\\MyTest3D_Graphics_2.txt"); // myArray_2[i, j] // WriteLine: Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 )� sw_2-Close(); //ȼыɫɜоɛожɞɚɟм ɪɟɫɭɪɫы оɬ оɛъɟкɬоɜ g и pen: ии g-Dispose(); pen-Dispose(); M_End: //ȿɫли эɬоɬ мɟɬоɞ DrawSolid ɜызɜɚн ɟщɟ ɪɚз //ɞля ɪиɫоɜɚния ɫлɟɞɭющɟɝо изоɛɪɚжɟния, //ɬо ɭɜɟличиɜɚɟм номɟɪ изоɛɪɚжɟния N_Graphics нɚ 1: N_Graphics = N_Graphics + 1; } Лиɫɬинɝ 24.6. Мɟɬоɞ пɟчɚɬи изоɛɪɚжɟния элɟмɟнɬɚ PictureBox. 25. Visual Basic Visual C++, Visual C# 25.1. Коɞ пɪоцɟɞɭɪы Form1_Load Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 ' : Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ g bmp: g = Graphics.FromImage(bmp) Window ' PictureBox1: g.Clear(SystemColors.Window) ' g: g.Dispose() : TransformAllDataFull(MatrixProjection) ' CheckBox : If CheckBox1.CheckState = _ Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : DesigningLine(0, 0, 0, 0.5, 0, 0) ' x. DesigningLine(0, 0, 0, 0, 0.5, 0) ' y. DesigningLine(0, 0, 0, 0, 0, 0.5) ' z. ' Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 DesigningLine(-R, -1, 0, -C, -1, A) DesigningLine(-D, -1, -B, -C, -1, -A) DesigningLine(-C, -1, -A, -R, -1, 0) (Icosahedron): Icosahedron_first = NumLines + 1 CSng(Sqrt(3 / 4 * (2 - 2 * c1) - _ 2 * c2 - c2 * c2 - 1))) C = R * c1 : D = R * c2 DesigningLine(R, H, 0, C, H, A) DesigningLine(C, H, -A, R, H, 0) DesigningLine(R, H, 0, 0, 1, 0) DesigningLine(C, H, -A, 0, 1, 0) DesigningLine(-R, -H, 0, -C, -H, A) DesigningLine(-C, -H, -A, -R, -H, 0) DesigningLine(-R, -H, 0, 0, -1, 0) DesigningLine(-C, -H, -A, 0, -1, 0) DesigningLine(R, H, 0, -D, -H, B) DesigningLine(D, H, B, -C, -H, A) DesigningLine(D, H, B, -R, -H, 0) DesigningLine(C, H, -A, -D, -H, -B) Icosahedron_last = NumLines Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ ' (points): &#xVBFi;&#xxedA;&#xrray;䀀 VBFixedArray(4) Dim fr_points() As Single ' '(transformed points): ReDim fr_points(4) : ReDim to_points(4) ReDim fr_tr_points(4) : ReDim to_tr_points(4) Lines Line ( ' ' ReDim ): Public Lines() As Line : Public NumLines As Integer (x1,y1,z1),(x2,y2,z2): Public Sub DesigningLine(ByVal x1 As Single, _ NumLines = NumLines + 1 ' Lines Line ' NumLines, ' ReDim Preserve ' : ReDim Preserve Lines(NumLines) ' : Lines(NumLines).Initialize() Lines(NumLines).fr_points(3) = z1 Lines(NumLines).fr_points(4) = 1 Lines(NumLines).to_points(4) = 1 End Sub (translation matrix) ' , MatrixApplyFull. ' 0, 0, 0, 1 : Public Sub TransformAllDataFull(ByRef M(,) As Single) TransformDataFull(M, 1, NumLines) Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 (translation matrix) ' , MatrixApplyFull. ' 0, 0, 0, 1 : Public Sub TransformDataFull(ByRef M(,) As Single, _ ByVal line1 As Integer, ByVal line2 As Integer) Dim i As Integer MatrixApplyFull(Lines(i).to_points, M, _ Lines(i).to_tr_points) ' 1: Dim N_Graphics As Integer = 1 : Public Sub DrawSolid(ByVal bmp As Bitmap, _ ByVal first_line As Integer, ByVal last_line As Integer, _ Dim x2 As Single : Dim y2 As Single Dim g As Graphics : Dim pen As Pen , , 2 '( Designing): pen = New Pen(color, 2) ' g bmp: g = Graphics.FromImage(bmp) : Dim i, j As Integer ' DrawSolid ' ' 1- M2: If N_Graphics = 2 Then GoTo M2 : ' myArrayVB(i, j) Dim N_x As Integer = 200 myArrayVB(i, j) Single, ' i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y: Dim myArrayVB(N_x, N_y) As Single ' . ' myArrayVB: Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ ' myArrayVB(i, j) ' : i = -1 ' . For k = first_line To last_line x1 = Lines(k).fr_tr_points(1) ' : 'g.DrawLine(pen, _ ' bmp.Height / 2.0F - (y2 * bmp.Height / 4) _ ') : x1 = (x1 * bmp.Width / 4) + bmp.Width / 2.0F x2 = (x2 * bmp.Width / 4) + bmp.Width / 2.0F y2 = bmp.Height / 2.0F - (y2 * bmp.Height / 4) : i = i + 2 myArrayVB(i, 1) = y1 myArrayVB(i + 1, 0) = x2 . Next ' N_first_line N_last_line ' myArrayVB: Dim N_first_line, N_last_line As Integer ' N_first_line ' N_last_line myArrayVB(0, 0) = N_first_line ' myArrayVB(200, 1). i = -1 y1 = myArrayVB(i, 1) x2 = myArrayVB(i + 1, 0) Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Next myArrayVB(200, 1) . ' sw StreamWriter D:\MyDocs\MyTest3D_Graphics.txt. If N_Graphics = 1 Then myArrayVB(i, j) ' WriteLine: For i = 0 To N_x Next sw.Close() M2: DrawSolid ' ' 2- 2- M_End: If N_Graphics = 1 Then GoTo M_End . ' 2- myArrayVB_2(i, j): Dim N_x_2 As Integer = 200 myArrayVB_2(i, j) Single, ' i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y: Dim myArrayVB_2(N_x_2, N_y_2) As Single ' myArrayVB_2: Dim N_1_myArrayVB_2 As Integer myArrayVB_2(i, j) ' : i = -1 ' . For k = first_line To last_line y2 = Lines(k).to_tr_points(2) ' : 'g.DrawLine(pen, _ ' (x2 * bmp.Width / 4) + bmp.Width / 2.0F, _ ' bmp.Height / 2.0F - (y2 * bmp.Height / 4) _ Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ : x1 = (x1 * bmp.Width / 4) + bmp.Width / 2.0F y2 = bmp.Height / 2.0F - (y2 * bmp.Height / 4) ' : i = i + 2 myArrayVB_2(i + 1, 0) = x2 myArrayVB_2(i + 1, 1) = y2 . Next N_first_line_2 N_last_line_2 ' myArrayVB_2: Dim N_first_line_2, N_last_line_2 As Integer N_first_line_2 ' N_last_line_2 myArrayVB_2(0, 0) = N_first_line_2 myArrayVB_2(200, 1): i = -1 For k = N_first_line_2 To N_last_line_2 x2 = myArrayVB_2(i + 1, 0) y2 = myArrayVB_2(i + 1, 1) myArrayVB_2(200, 1) . ' sw_2 StreamWriter D:\MyDocs\MyTest3D_Graphics_2.txt. ' : Dim sw_2 As StreamWriter = _ ' myArrayVB_2(i, j) ' WriteLine: For i = 0 To N_x_2 Next Next Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 g g.Dispose() : pen.Dispose() DrawSolid ' , ' N_Graphics 1: N_Graphics = N_Graphics + 1 : Public Sub MatrixIdentity(ByRef M(,) As Single) Dim i As Integer : Dim j As Integer M(i, j) = 1 Else Next End Sub (3-D transformation matrix) ' z x,y ' ( ) ' (0, 0, Distance): Public Sub MatrixPerspectiveXZ(ByRef M(,) As Single, _ End Sub ' (3-D transformation matrix) ' : ' (cx, cy, cz), ' (fx, fy, fx), ' &#xux, ;&#xyx, ;&#xuz00; UP ux, yx, uz, ' (type_of_projection): 'PerspectiveProjection ParallelProjection: Public Sub MatrixTransformation(ByRef M(,) As Single, _ ByVal Cx As Single, _ ByVal Cy As Single, ByVal Cz As Single, _ Static M1(4, 4) As Single : Static M2(4, 4) As Single Static M3(4, 4) As Single : Static M4(4, 4) As Single Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ Static M1234(4, 4) As Single Dim sin3 As Single : Dim cos3 As Single Dim A As Single : Dim B As Single ' ( ) : MatrixTranslate(M1, -Fx, -Fy, -Fz) sin1 = -A / d1 : cos1 = C / d1 End If End If ' y, ' : MatrixIdentity(M2) d1 = 0, ' y : � If d1 0 Then ' x, ' Z. MatrixIdentity(M3) d2 = 0, ' . ' . � If d2 0 Then ' UP: up1(1) = ux : up1(2) = uy : up1(3) = uz ' vector in the Y-Z plane. ' z, UP : Компьюɬɟɪнɚя ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 up1(2) * up1(2))) d3 = 0, UP : � If d3 0 Then sin3 = up1(1) / d3 : cos3 = up1(2) / d3 ' : If type_of_projection = _ MatrixIdentity(M5) End If : m3MatMultiply(M12, M1, M2) m3MatMultiply(M1234, M12, M34) If type_of_projection = PerspectiveProjection Then End If End Sub (3-D transformation matrix) ' (perspective projection): ' Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ ' , ' , ' (p1, p2, p3) &#xn1, ;&#xn2, ;&#xn300; n1, n2, n3: Public Sub m3Reflect(ByRef M(,) As Single, _ ByVal p1 As Single, ByVal p2 As Single, _ . Dim R1(4, 4) As Single ' 1. Dim r2(4, 4) As Single ' 2. Dim S(4, 4) As Single ' . Dim R2i(4, 4) As Single ' 2. Dim R1i(4, 4) As Single ' 1. Dim Ti(4, 4) As Single ' . Dim D As Single : Dim L As Single ' : MatrixTranslate(T, -p1, -p2, -p3) z, ' : MatrixIdentity(R1) D = CSng(Sqrt(n1 * n1 + n2 * n2)) R1i(1, 1) = R1(1, 1) : R1i(1, 2) = -R1(1, 2) R1i(2, 1) = -R1(2, 1) : R1i(2, 2) = R1(2, 2) x, y: MatrixIdentity(r2) r2(2, 2) = D / L : r2(2, 3) = -n3 / L r2(3, 2) = -r2(2, 3) : r2(3, 3) = r2(2, 2) ' x-z : MatrixIdentity(S) : m3MatMultiply(M12, T, R1) : m3MatMultiply(M34, r2, S) m3MatMultiply(M1234, M12, M34) m3MatMultiply(M56, R2i, R1i) 100 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 End Sub Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ 101 m3MatMultiply(M1234, M12, M34) m3MatMultiply(M, M1234, M567) End Sub (3-D transformation matrix) ' Tx, Ty, Tz: Public Sub MatrixTranslate(ByRef M(,) As Single, _ ByVal Tx As Single, ByVal Ty As Single, ByVal Tz As Single) MatrixIdentity(M) (3-D transformation matrix) ' y ( - ): Public Sub MatrixYRotate(ByRef M(,) As Single, _ 102 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Result(4) = 1 : Public Sub MatrixApply(ByRef V() As Single, _ ByRef M(,) As Single, ByRef Result() As Single) V(3) * M(3, 2) + M(4, 2) Result(3) = V(1) * M(1, 3) + V(2) * M(2, 3) + _ ' . ' 0, 0, 0, 1 : Public Sub m3MatMultiplyFull(ByRef Result(,) As Single, _ Dim k As Integer : Dim value As Single For i = 1 To 4 value = value + A(i, k) * B(k, j) Next k End Sub ' : Public Sub m3MatMultiply(ByRef Result(,) As Single, _ + A(1, 3) * B(3, 1) Result(1, 2) = A(1, 1) * B(1, 2) + A(1, 2) * B(2, 2) _ Result(1, 4) = 0 Result(2, 1) = A(2, 1) * B(1, 1) + A(2, 2) * B(2, 1) _ Result(2, 3) = A(2, 1) * B(1, 3) + A(2, 2) * B(2, 3) _ + A(2, 3) * B(3, 3) Ƚлɚɜɚ 25. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VB VC++ 103 25.4. Мɟɬоɞ VB изоɛɪɚжɟния 26. Visual C# Visual C++, Visual Basic 26.1. Коɞ мɟɬоɞɚ Form1_Load Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 105 ParallelProjection): Projection(ref MatrixProjection, PerspectiveProjection, 106 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // g Graphics: Graphics g; g bmp: g = Graphics.FromImage(bmp); // Window // PictureBox1: g.Clear(SystemColors.Window); g: g.Dispose(); // : TransformAllDataFull(ref MatrixProjection); CheckBox : if (checkBox1.CheckState == System.Windows.Forms.CheckState.Checked) { Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 107 108 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 DesigningLine(0, -1, 0, -1, 0, 0); DesigningLine(0, 0, 1, 1, 0, 0); DesigningLine(0, 0, 1, -1, 0, 0); (Dodecahedron): Dodecahedron = NumLines + 1; Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 109 -X * c1, 1 - y2, -X * s1); DesigningLine(-R, -1, 0, -X, 1 - y2, 0); DesigningLine(-C, -1, A, -X * c1, 1 - y2, X * s1); DesigningLine(-R, -1, 0, -C, -1, A); DesigningLine(-C, -1, A, -D, -1, B); // (Icosahedron): Icosahedron_first = NumLines + 1; S = R * (float)Math.Sqrt(2 - 2 * c1); H = 1 - (float)Math.Sqrt(S * S - R * R); DesigningLine(D, H, B, D, H, -B); DesigningLine(D, H, -B, C, H, -A); DesigningLine(D, H, B, 0, 1, 0); DesigningLine(D, H, -B, 0, 1, 0); DesigningLine(-D, -H, B, -D, -H, -B); DesigningLine(-D, -H, -B, -C, -H, -A); DesigningLine(-D, -H, B, 0, -1, 0); DesigningLine(-D, -H, -B, 0, -1, 0); DesigningLine(C, H, A, -D, -H, B); DesigningLine(C, H, A, -C, -H, A); 110 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 DesigningLine(D, H, -B, -R, -H, 0); DesigningLine(C, H, -A, -D, -H, -B); Icosahedron_last = NumLines; Line : public struct Line { // (points): public float[] fr_points; : //(transformed (tr) points): public float[] fr_tr_points; , . // 0: public void Initialize() { to_tr_points = new float[5]; } Lines Line, new // 100 , // . null: public Line[] Lines = new Line[100]; : public int NumLines = 0; (x1,y1,z1),(x2,y2,z2): public void DesigningLine(float x1, float y1, float z1, float x2, float y2, float z2) : Lines[NumLines].Initialize(); Lines[NumLines].fr_points[1] = x1; Lines[NumLines].to_points[1] = x2; Lines[NumLines].to_points[2] = y2; Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 111 } (translation matrix) // , MatrixApplyFull. // 0, 0, 0, 1 : public void TransformAllDataFull(ref float[,] M) // (translation matrix) // , MatrixApplyFull. // 0, 0, 0, 1 : public void TransformDataFull(ref float[,] M, { for (int i = line1; i = line2; i++) MatrixApplyFull(ref Lines[i].to_points, ref M, ref Lines[i].to_tr_points); // 1: int N_Graphics = 1; : public void DrawSolid(Bitmap bmp, { float x1, y1, x2, y2; , , 2 //( Designing): pen = new Pen(color, 2); // g bmp: g = Graphics.FromImage(bmp); : int i, j, k; // DrawSolid // // 1- M2: if (N_Graphics == 2) goto M2; // . // myArray[i, j]: int N_x = 200; 112 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // myArray[i, j] float, //i = 0,1,2,3,...,(N_x-1); j = 0,1,2,3,...,(N_y-1): . // myArray: int N_1_myArray; myArray(i, j) // : i = -1; // . for (k = first_line; k = last_line; k++) { y2 = Lines[k].to_tr_points[2]; // : //g.DrawLine(pen, // (x2 * bmp.Width / 4) + bmp.Width / 2.0F, // bmp.Height / 2.0F - (y2 * bmp.Height / 4)); : x1 = (x1 * bmp.Width / 4) + bmp.Width / 2.0F; x2 = (x2 * bmp.Width / 4) + bmp.Width / 2.0F; y2 = bmp.Height / 2.0F - (y2 * bmp.Height / 4); : i = i + 2; myArray[i, 1] = y1; myArray[i + 1, 0] = x2; . } // N_last_line // myArray: int N_first_line, N_last_line; // N_first_line // N_last_line myArray[0, 0] = N_first_line; // myArray[200, 2]. i = -1; Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 113 i = i + 2; x2 = myArray[i + 1, 0]; y2 = myArray[i + 1, 1]; myArray(200, 1) . // sw StreamWriter D:\MyDocs\MyTest3D_Graphics.txt. if (N_Graphics == 1) @"D:\MyDocs\MyTest3D_Graphics.txt"); // myArray[i, j] // WriteLine: for (i = 0; i = N_x-1; i++) sw.WriteLine(myArray[i, j]); sw.Close(); DrawSolid // // 2- 2- M_End: if (N_Graphics == 1) goto M_End; . // 2- myArray_2(i, j): int N_x_2 = 200; myArray_2(i, j) Single, // i = 0,1,2,3,...,(N_x-1); j = 0,1,2,3,...,(N_y-1): float[,] myArray_2 = new float[N_x_2, N_y_2];// . // myArray_2: int N_1_myArray_2; myArray_2(i, j) // : i = -1; // . for (k = first_line; k = last_line; k++) y1 = Lines[k].fr_tr_points[2]; x2 = Lines[k].to_tr_points[1]; 114 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : //g.DrawLine(pen, // (x2 * bmp.Width / 4) + bmp.Width / 2.0F, // bmp.Height / 2.0F - (y2 * bmp.Height / 4)); : x1 = (x1 * bmp.Width / 4) + bmp.Width / 2.0F; x2 = (x2 * bmp.Width / 4) + bmp.Width / 2.0F; y2 = bmp.Height / 2.0F - (y2 * bmp.Height / 4); : i = i + 2; myArray_2[i, 1] = y1; myArray_2[i + 1, 0] = x2; . } // N_first_line_2 N_last_line_2 // myArray_2: int N_first_line_2, N_last_line_2; // N_first_line_2 // N_last_line_2 myArray_2[0, 0] = N_first_line_2; // myArray_2[200, 1]: i = -1; x1 = myArray_2[i, 0]; y1 = myArray_2[i, 1]; } myArray_2[200, 1] . // sw_2 StreamWriter D:\MyDocs\MyTest3D_Graphics_2.txt. // : StreamWriter sw_2 = new StreamWriter( @"D:\MyDocs\MyTest3D_Graphics_2.txt"); myArray_2[i, j] Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 115 WriteLine: for (i = 0; i = N_x_2-1; i++) sw_2.Close(); // g g.Dispose(); pen.Dispose(); DrawSolid // , // N_Graphics 1: N_Graphics = N_Graphics + 1; : public void MatrixIdentity(ref float[,] M) { { if (i == j) M[i, j] = 1; } // (3-D transformation matrix) // z x,y // ( ) // (0, 0, Distance): public void MatrixPerspectiveXZ(ref float[,] M, float Distance) } // (3-D transformation matrix) // : // (cx, cy, cz), (fx, fy, fx), // &#xux, ;&#xyx, ;&#xuz00; UP ux, yx, uz, // (type_of_projection): //PerspectiveProjection ParallelProjection: public void MatrixTransformation(ref float[,] M, float Fx, float Fy, float Fz, float ux, float uy, float uz) 116 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 float[,] M2 = new float[5, 5]; float[,] M5 = new float[5, 5]; float[,] M12 = new float[5, 5]; float sin3, cos3; float A, B, C; float d1, d2, d3; float[] up1 = new float[5]; float[] up2 = new float[5]; ( ) : MatrixTranslate(ref M1, -Fx, -Fy, -Fz); d1 = (float)Math.Sqrt(A * A + C * C); if (d1 != 0) d2 = (float)Math.Sqrt(A * A + B * B + C * C); if (d2 != 0) // y, // : MatrixIdentity(ref M2); d1 = 0, // y : if (d1 != 0) { // x, // z: MatrixIdentity(ref M3); d2 = 0, // . // : if (d2 != 0) } // UP: up1[1] = ux; up1[2] = uy; up1[3] = uz; Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 117 MatrixApply(ref up1, ref M2, ref up2); z, UP : d3 = (float)Math.Sqrt(up1[1] * up1[1] + d3 = 0, UP : if (d3 != 0) { } // : if (type_of_projection == PerspectiveProjection) MatrixIdentity(ref M5); if (d2 != 0) // : m3MatMultiply(ref M12, ref M1, ref M2); m3MatMultiplyFull(ref M, ref M1234, ref M5); else (3-D transformation matrix) // (perspective projection): // 118 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : Cy = R * (float)Math.Sin(phi); Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 119 // x-z : MatrixIdentity(ref S); S[2, 2] = -1; : m3MatMultiply(ref M12, ref T, ref R1); m3MatMultiply(ref M34, ref r2, ref S); m3MatMultiply(ref M, ref M1234, ref M567); } 120 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 L = (float)Math.Sqrt(d1 * d1 + d2 * d2 + d3 * d3); MatrixIdentity(ref R2i); R2i[2, 2] = r2[2, 2]; R2i[2, 3] = -r2[2, 3]; ( y): Ƚлɚɜɚ 26. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ оɛъɟкɬɚми VC# VC++ 121 { Result[i] = value; } (value = Result[4]): if (value != 0) Result[1] = Result[1] / value; Result[2] = Result[2] / value; // z - . // z , , // : Result[3] = Single.MaxValue; Result[4] = 1; } : public void MatrixApply(ref float[] V, { Result[1] = V[1] * M[1, 1] + V[2] * M[2, 1] + Result[3] = V[1] * M[1, 3] + V[2] * M[2, 3] + V[3] * M[3, 3] + M[4, 3]; . // 0, 0, 0, 1 : public void m3MatMultiplyFull(ref float[,] Result, for (i = 1; i = 4; i++) { for (k = 1; k = 4; k++) value = value + A[i, k] * B[k, j]; 122 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 ref float[,] A, ref float[,] B) { Result[1, 1] = A[1, 1] * B[1, 1] + A[1, 2] * B[2, 1] + A[1, 3] * B[3, 1]; Result[1, 2] = A[1, 1] * B[1, 2] + A[1, 2] * B[2, 2] + A[1, 3] * B[3, 2]; Result[1, 3] = A[1, 1] * B[1, 3] + A[1, 2] * B[2, 3] + A[1, 3] * B[3, 3]; Result[1, 4] = 0; Result[2, 1] = A[2, 1] * B[1, 1] + A[2, 2] * B[2, 1] + A[2, 3] * B[3, 1]; Result[2, 2] = A[2, 1] * B[1, 2] + A[2, 2] * B[2, 2] + A[2, 3] * B[3, 2]; Result[2, 3] = A[2, 1] * B[1, 3] + A[2, 2] * B[2, 3] + A[2, 3] * B[3, 3]; Result[2, 4] = 0; Result[3, 1] = A[3, 1] * B[1, 1] + A[3, 2] * B[2, 1] + A[3, 3] * B[3, 1]; Result[3, 2] = A[3, 1] * B[1, 2] + A[3, 2] * B[2, 2] + A[3, 3] * B[3, 2]; Result[3, 3] = A[3, 1] * B[1, 3] + A[3, 2] * B[2, 3] + A[3, 3] * B[3, 3]; Result[3, 4] = 0; Result[4, 1] = A[4, 1] * B[1, 1] + A[4, 2] * B[2, 1] + A[4, 3] * B[3, 1] + B[4, 1]; Result[4, 2] = A[4, 1] * B[1, 2] + A[4, 2] * B[2, 2] + A[4, 3] * B[3, 2] + B[4, 2]; Result[4, 3] = A[4, 1] * B[1, 3] + A[4, 2] * B[2, 3] + A[4, 3] * B[3, 3] + B[4, 3]; Result[4, 4] = 1; } Лиɫɬинɝ 26.4. Мɟɬоɞ пɟчɚɬи изоɛɪɚжɟния элɟмɟнɬɚ PictureBox. 27. Visual C++ ноɜоɝо Visual C++ 2005 ɞɜɭɯмɟɪный мɚɫɫиɜ оɛъяɜляɟɬɫя инициɚлизиɪɭɟɬɫя ɬɚк инициɚлизɚции ɞɜɭɯмɟɪноɝо мɚɫɫиɜɚ пɪɚɜой чɚɫɬи ɜмɟɫɬо N_x, N_y можɟм конкɪɟɬныɟ ɜɟɪɯниɯ ɝɪɚниц Пɟɪɟɞ оɛъяɜлɟниɟм поɞключиɬь ноɜоɟ пɪоɫɬɪɚнɫɬɜо ɜɟɪɯнɟй ɫɝɟнɟɪиɪоɜɚнноɝо пɪоɫɬɪɚнɫɬɜɚ имɟнɟм пɪоɟкɬɚ Кɪомɟ эɬоɝо иɫпользоɜɚния StreamWriter пɪоɟкɬɟ Visual C++ 2005 ɞолжны ɬɚкжɟ пɪоɫɬɪɚнɫɬɜо IO: кооɪɞинɚɬ изоɛɪɚжɟния нɚпɪимɟɪ ɚɞɪɟɫɭ D:\\MyDocs\\MyTest3D_Graphics.txt myArrayVC[N_x, N_y] оɛъяɜляɟм sr StreamReader пɪи помощи конɫɬɪɭкɬоɪɚ gcnew ( ноɜомɭ Visual C++ 2005) ɫозɞɚɟм экзɟмпляɪ эɬоɝо оɛъɟкɬɚ пɚɪɚмɟɬɪом ɜиɞɟ кооɪɞинɚɬɚми изоɛɪɚжɟния "D:\\MyDocs\\MyTest3D_Graphics.txt"); 27.1. Мɟɬоɞ ɪиɫоɜɚния ɝɟомɟɬɪичɟɫкиɯ изоɛɪɚжɟний 124 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 "D:\\MyDocs\\MyTest3D_Graphics.txt"); for (j = 0; j = N_y - 1; j++) myArrayVC[i, j] = � Convert::ToSingle(sr-ReadLine()); Ƚлɚɜɚ 27. Изоɛɪɚжɟниɟ оɛъɟкɬоɜ VC++, VB, VC# 125 "D:\\MyDocs\\MyTest3D_Graphics_2.txt"); for (j = 0; j = N_y - 1; j++) myArrayVC_2[i, j] = �Convert::ToSingle(sr_2-ReadLine()); ) N_last_line_2 = Convert::ToInt32(myArrayVC_2[0, 1]); //Ɋиɫɭɟм изоɛɪɚжɟниɟ, нɚчинɚя ɫ ɬочки (1,0; 1,1): i = -1; for (k = N_first_line_2; k = N_last_line_2; k++) { i = i + 2; x2 = myArrayVC_2[i + 1, 0];y2 = myArrayVC_2[i + 1, 1]; �� e-Graphics-DrawLine(myPen_2, x1, y1, x2, y2); } 28. Visual C# Visual 28.1. Мɟɬоɞ ɪиɫоɜɚния ɝɟомɟɬɪичɟɫкиɯ изоɛɪɚжɟний private void pictureBox1_Paint(object sender, { // // j = 0,1,2,3,...,(N_y - 1): float[,] myArrayVC = new float[N_x, N_y]; // // new StreamReader( @"D:\\MyDocs\\MyTest3D_Graphics.txt"); // // for (i = 0; i = N_x - 1; i++) for (j = 0; j = N_y - 1; j++) Convert.ToSingle(sr.ReadLine()); sr.Close(); // // Pen myPen = new Pen(Color.Black, 3); // // N_first_line = Convert.ToInt32(myArrayVC[0, 0]); Ƚлɚɜɚ 28. Изоɛɪɚжɟниɟ оɛъɟкɬоɜ VC# VC++, VB, VC# 127 ) //Ɋиɫɭɟм изоɛɪɚжɟниɟ, нɚчинɚя ɫ ɬочки (1,0; 1,1): i = -1; for (k = N_first_line; k = N_last_line; k++) { y1 = myArrayVC[i, 1]; x2 = myArrayVC[i + 1, 0]; y2 = myArrayVC[i + 1, 1]; e.Graphics.DrawLine(myPen, x1, y1, x2, y2); } // j = 0,1,2,3,...,(N_y_2 - 1): float[,] myArrayVC_2 = new float[N_x_2, N_y_2]; // // @"D:\\MyDocs\\MyTest3D_Graphics_2.txt"); // // for (i = 0; i = N_x - 1; i++) for (j = 0; j = N_y - 1; j++) Convert.ToSingle(sr_2.ReadLine()); sr_2.Close(); // Pen myPen_2 = new Pen(Color.Black, 1); // // N_first_line_2 = Convert.ToInt32(myArrayVC_2[0, 0]); 128 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 { y1 = myArrayVC_2[i, 1]; x2 = myArrayVC_2[i + 1, 0]; y2 = myArrayVC_2[i + 1, 1]; e.Graphics.DrawLine(myPen_2, x1, y1, x2, y2); } } 29. Visual C# Visual C++, 29.1. Коɞ мɟɬоɞɚ Form1_Load 130 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 for (i = 0; i = x_max; i++) { x = i + x_min; for (j = 0; j = y_max; j++) { y = j + y_min; // z = f(x, y); Points[i, j] = new myClassPoint3D(x, y, z); } } // Axes[0] = new myClassPoint3D(0, 0, 0); Axes[1] = new myClassPoint3D(30, 0, 0); Axes[2] = new myClassPoint3D(0, 30, 0); Axes[3] = new myClassPoint3D(0, 0, 30); 29.2. Мɟɬоɞо pictureBox1_Paint ɪиɫоɜɚния поɜɟɪɯноɫɬи Ƚлɚɜɚ 29. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VC# VC++, VB 131 //ɞля ɪиɫоɜɚния линий поɜɟɪɯноɫɬи, //пɚɪɚллɟльныɯ плоɫкоɫɬи кооɪɞинɚɬ xz: float x1, y1, x2, y2; Pen myPen = new Pen(Color.Black, 0); i = -2;//Зɚɞɚɟм ɞо циклоɜ. for (int x = 0; x = x_max; x++) { x2 = ) y2 = ) for (int y = 1; y = y_max; y++) { x1 = x2; y1 = y2; x2 = ) y2 = ) // myArrayVCsharp[i, 1] = y1; myArrayVCsharp[i + 1, 0] = x2; myArrayVCsharp[i + 1, 1] = y2; N_1_myArrayCsharp = i + 1; //1-я ɝɪɚн. ɜ мɚɫɫиɜɟ. } } //ɞля ɪиɫоɜɚния линий поɜɟɪɯноɫɬи, //пɚɪɚллɟльныɯ плоɫкоɫɬи кооɪɞинɚɬ yz: i = N_1_myArrayCsharp - 1; for (int y = 0; y = y_max; y++) { x2 = ) y2 = ) for (int x = 1; x = x_max; x++) { 132 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 x1 = x2; y1 = y2; x2 = ) y2 = ) // //e.Graphics.DrawLine(myPen,x1,y1, x2, y2); // myArrayVCsharp[i, 1] = y1; myArrayVCsharp[i + 1, 0] = x2; myArrayVCsharp[i + 1, 1] = y2; N_2_myArrayCsharp = i + 1; //2-я ɝɪɚн. ɜ мɚɫɫиɜɟ. } } //Пɪɟоɛɪɚзоɜыɜɚɟм оɫи(axes): for (int k = 0; k = 3; k++) Axes[k].Transformation(tr); //Ɋɚɫɫчиɬыɜɚɟм элɟмɟнɬы мɚɫɫиɜɚ ɞля ɪиɫоɜɚния оɫɟй: Pen myPenAxes = new Pen(Color.Red, 0); i = N_2_myArrayCsharp - 1; x1 = Convert.ToSingle(Axes[0].trans_coord[0]); y1 = Convert.ToSingle(Axes[0].trans_coord[1]); for (int k = 1; k = 3; k++) { ) y2 = Convert.ToSingle(Axes[k].trans_coord[1]); //Можно ɪиɫоɜɚɬь оɫи кооɪɞинɚɬ и зɞɟɫь: //e.Graphics.DrawLine(myPenAxes, x1, y1, x2, y2); // myArrayVCsharp[i, 1] = y1; myArrayVCsharp[i + 1, 0] = x2; myArrayVCsharp[i + 1, 1] = y2; N_3_myArrayCsharp = i + 1; //Чиɫло чиɫɟл ɜ мɚɫɫиɜɟ. } //Ɋиɫɭɟм пɪи помощи мɚɫɫиɜɚ //кооɪɞинɚɬ myArrayVCsharp[2000, 1]. //Ɋиɫɭɟм линии, пɚɪɚллɟльныɟ плоɫкоɫɬи xz: i = -2; for (int x = 0; x = x_max; x++) { { Ƚлɚɜɚ 29. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VC# VC++, VB 133 y1 = myArrayVCsharp[i, 1]; x2 = myArrayVCsharp[i + 1, 0]; y2 = myArrayVCsharp[i + 1, 1]; e.Graphics.DrawLine(myPen, x1, y1, x2, y2); } } { for (int x = 1; x = x_max; x++) { i = i + 2; y1 = myArrayVCsharp[i, 1]; x2 = myArrayVCsharp[i + 1, 0]; y2 = myArrayVCsharp[i + 1, 1]; e.Graphics.DrawLine(myPen, x1, y1, x2, y2); } } { i = i + 2; y1 = myArrayVCsharp[i, 1]; x2 = myArrayVCsharp[i + 1, 0]; y2 = myArrayVCsharp[i + 1, 1]; e.Graphics.DrawLine(myPen2, x1, y1, x2, y2); } ɜ ɮɚйл. //ɋозɞɚɟм оɛъɟкɬ sw клɚɫɫɚ StreamWriter //ɞля зɚпиɫи ɜ ɮɚйл по ɚɞɪɟɫɭ D:\MyDocs\MyTest.txt. //Ɏɚйл ɚɜɬомɚɬичɟɫки очищɚɟɬɫя: StreamWriter sw = new StreamWriter("D:\\MyDocs\\MyTest.txt"); зɚпиɫыɜɚɟм ɜ ɮɚйл //ɜ ɜиɞɟ оɬɞɟльной ɫɬɪоки пɪи помощи пɪоцɟɞɭɪы WriteLine: for (i = 0; i = N_x; i++) for (j = 0; j = N_y; j++) 134 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 29.3. Мɟɬоɞ ProcessCmdKey поɜɟɪɯноɫɬи ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) // Ƚлɚɜɚ 29. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VC# VC++, VB 135 136 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 orig_coord[1] = y; orig_coord[2] = z; double myScale; myScale = 1; // orig_coord[3] = myScale; } bool normalize = true; public void Transformation(myClassMatrix3D matrix) { double value = 0; int i, j; { value = value + orig_coord[j] * matrix.M[j, i]; trans_coord[i] = value; } { trans_coord[0] = trans_coord[0] / value; trans_coord[1] = trans_coord[1] / value; trans_coord[2] = trans_coord[2] / value; trans_coord[3] = 1; } } // public double[,] M = new double[4, 4]; // public myClassMatrix3D() { } // public myClassMatrix3D( double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, Ƚлɚɜɚ 29. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VC# VC++, VB 137 double m20, double m21, double m22, double m23, double m30, double m31, double m32, double m33) { M[0, 0] = m00; M[0, 1] = m01; M[0, 2] = m02; M[0, 3] = m03; M[1, 0] = m10; M[1, 1] = m11; M[1, 2] = m12; M[1, 3] = m13; M[2, 0] = m20; M[2, 1] = m21; M[2, 2] = m22; M[2, 3] = m23; M[3, 0] = m30; M[3, 1] = m31; M[3, 2] = m32; M[3, 3] = m33; } // public myClassMatrix3D TimesMatrix( myClassMatrix3D right_matrix) { myClassMatrix3D result = new myClassMatrix3D(); double value; int i, j, k; for (i = 0; i = 3; i++) { for (j = 0; j = 3; j++) { value = 0; for (k = 0; k = 3; k++) { value = value + M[i, k] * right_matrix.M[k, j]; } result.M[i, j] = value; } } 138 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 } // public static myClassMatrix3D 30. Visual Basic Visual C++, 30.1. Коɞ пɪоцɟɞɭɪы Form1_Load 140 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 30.2. Мɟɬоɞ PictureBox1_Paint ɪиɫоɜɚния поɜɟɪɯноɫɬи Ƚлɚɜɚ 30. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VB VC++, VC# ' myArrayVB(i, j) Single, ' i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y: Dim myArrayVB(N_x, N_y) As Single ' , , , xz, yz, : Dim N_1_myArrayVB, N_2_myArrayVB, _ myArrayVB(i, j) ' , ' xz: Dim x1, y1, x2, y2 As Single . For x As Integer = 0 To x_max With Points(x, 0) x2 = .trans_coord(0) x1 = x2 : y1 = y2 With Points(x, y) ' : 'e.Graphics.DrawLine(myPen, x1, y1, x2, y2) : i = i + 2 myArrayVB(i, 1) = y1 myArrayVB(i + 1, 0) = x2 . Next Next ' myArrayVB(i, j) ' , ' yz: i = N_1_myArrayVB - 1 For y As Integer = 0 To y_max With Points(0, y) For x As Integer = 1 To x_max x1 = x2 : y1 = y2 142 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 y2 = .trans_coord(1) : 'e.Graphics.DrawLine(myPen, x1, y1, x2, y2) ' : i = i + 2 myArrayVB(i + 1, 0) = x2 myArrayVB(i + 1, 1) = y2 . Next ' (axes): For k As Integer = 0 To 3 : i = N_2_myArrayVB - 1 x1 = Axes(0).trans_coord(0) y2 = Axes(k).trans_coord(1) ' : 'e.Graphics.DrawLine(myPen, x1, y1, x2, y2) : i = i + 2 myArrayVB(i, 0) = x1 myArrayVB(i, 1) = y1 . Next ' myArrayVB(2000, 1). ' , xz: Dim myPen As New Pen(Color.Black, 0) For x As Integer = 0 To x_max For y As Integer = 1 To y_max x2 = myArrayVB(i + 1, 0) y2 = myArrayVB(i + 1, 1) Ƚлɚɜɚ 30. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VB VC++, VC# Чɬоɛы ɭпɪɚɜляɬь нɚпɪимɟɪ ɜɪɚщɚɬь пɪи помощи окнɟ Class Name ɜыɛиɪɚɟм (Overrides), окнɟ 144 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 30.3. Мɟɬоɞ ProcessCmdKey поɜɟɪɯноɫɬи Ƚлɚɜɚ 30. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VB VC++, VC# 30.4. Мɟɬоɞ 146 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 ' (transformation matrix): Public Function Transformation( _ Optional ByVal normalize As Boolean = True) _ As myClassPoint3D value = 0 For j As Integer = 0 To 3 trans_coord(i) = value Next : If normalize Then value = trans_coord(3): trans_coord(0) = trans_coord(0) / value trans_coord(1) = trans_coord(1) / value End Function End Class ' : Public Class myClassMatrix3D ' (matrix) 4x4: Public M(3, 3) As Double : Public Sub New() End Sub ' : Public Sub New( _ ByVal m10 As Double, ByVal m11 As Double, _ ByVal m12 As Double, ByVal m13 As Double, _ ByVal m32 As Double, ByVal m33 As Double) M(0, 0) = m00 : M(0, 1) = m01 : M(0, 2) = m02 Ƚлɚɜɚ 30. Изоɛɪɚжɟниɟ ɭпɪɚɜлɟниɟ поɜɟɪɯноɫɬями VB VC++, VC# M(1, 3) = m13 M(3, 0) = m30 : M(3, 1) = m31 : M(3, 2) = m32 M(3, 3) = m33 : Public Function TimesMatrix( _ ByVal right_matrix As myClassMatrix3D) As myClassMatrix3D Dim result As New myClassMatrix3D value = 0 For k As Integer = 0 To 3 result.M(i, j) = value Next 148 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 pt.orig_coord(2)) 31. Visual C++ 31.1. Мɟɬоɞ ɪиɫоɜɚния поɜɟɪɯноɫɬи // // 150 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // //ɫозɞɚɟм оɛъɟкɬ sr клɚɫɫɚ StreamReader: String^ path = "D:\\MyDocs\\MyTest.txt"; gcnew StreamReader(path); // for (i = 0; i = N_x - 1; i++) for (j = 0; j = N_y - 1; j++) �Convert::ToSingle(sr-ReadLine()); � sr-Close(); // // Pen^ myPen = gcnew Pen(Color::Black, 0); { { x1 = myArrayVC[i, 0]; y1 = myArrayVC[i, 1]; y2 = myArrayVC[i + 1, 1]; ��e-Graphics-DrawLine(myPen, x1, y1, x2, y2); } } N_1_myArray = i + 1; // // { { y1 = myArrayVC[i, 1]; x2 = myArrayVC[i + 1, 0]; y2 = myArrayVC[i + 1, 1]; �� e-Graphics-DrawLine(myPen, x1, y1, x2, y2); } } Ƚлɚɜɚ 31. Изоɛɪɚжɟниɟ поɜɟɪɯноɫɬɟй VC++ VC# VB // Pen^ myPen2 = gcnew Pen(Color::Red, 0); { y1 = myArrayVC[i, 1]; x2 = myArrayVC[i + 1, 0]; y2 = myArrayVC[i + 1, 1]; �� e-Graphics-DrawLine(myPen2, x1, y1, x2, y2); N_3_myArray = i + 1; //Ɍɪɟɬья ɝɪɚницɚ мɚɫɫиɜɚ. } 32. Visual C# Visual C++, Visual Basic 32.1. Коɞ мɟɬоɞɚ Form1_Load Ƚлɚɜɚ 32. Ɋɚɫчɟɬ ɭɪоɜня VC# VC++ VB 153 float x_max = 2f; 154 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 if ((Math.Abs(dx) + Math.Abs(dy)) 0.001) break; : x = x + dx * delta * (float)direction; y = y + dy * delta * (float)direction; } : private void Gradient(float x, float y, ref float dx, ref float dy) dist = Convert.ToSingle(Math.Sqrt(dx * dx + dy * dy)); if (Math.Abs(dist) 0.0001) else { // : // myArray_2(i, j): int N_x_2 = 20000; int N_y_2 = 2; myArray_2[i, j] float, // i = 0,1,2,3,...,(N_x-1); j = 0,1,2,3,...,(N_y-1). // : float[,] myArray_2 = new float[20000, 2]; myArray_2: int N_1_myArray_2; : int ii = -1; f(x, y) = LevelCurves: private void PlotLevelCurve(Graphics g, float y_max, float step_size, float start_x, float start_y, : int i, j; // 1- . // 1- myArray(i, j): Ƚлɚɜɚ 32. Ɋɚɫчɟɬ ɭɪоɜня VC# VC++ VB 155 // 1- myArray(i, j) Single, // i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y. // : float[,] myArray = new float[N_x, N_y]; // myArray: int N_1_myArray = 0; : int num_points = 0; float x0 = 0, y0 = 0, x1, y1, x2, y2, dx = 0, dy = 0; // (x0, y0) LevelCurves: FindPointOnCurve(ref x0, ref y0, LevelCurves, : num_points = 1; // LevelCurves: x2 = x0; y2 = y0; . do-while break: int counter = 0; // : if ((Math.Abs(dx) + Math.Abs(dy)) 0.001) break; FindPointOnCurve(ref x2, ref y2, LevelCurves, x2, y2, tolerance); ( ) . //g.DrawLine(myPen, x1, y1, x2, y2); , : i = i + 2; myArray[i + 1, 1] = y2; N_1_myArray = i + 1; // . // // 2- , : ii = ii + 2; myArray_2[ii, 0] = x1; myArray_2[ii, 1] = y1; 156 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 N_1_myArray_2 = ii + 1; // . // : num_points = num_points + 1; // : if (x2 x_min) break; // 4 , , // : � if (num_points = 4) (y0 - y2) * (y0 - y2)) = step_size * 1.1) { ( ): //g.DrawLine(myPen, x2, y2, x0, y0); : i = i + 2; myArray[i, 0] = x2; N_1_myArray = i + 1; // . // 2- , // : ii = ii + 2; myArray_2[ii, 1] = y2; myArray_2[ii + 1, 0] = x0; . break; } } do-while. // , . counter 1: while (counter 1); // N_first_line N_last_line // myArray: int N_first_line, N_last_line; // N_first_line // N_last_line Ƚлɚɜɚ 32. Ɋɚɫчɟɬ ɭɪоɜня VC# VC++ VB 157 myArray[0, 1] = N_last_line; myArray[20000, 2]: int k; i = -1; for (k = N_first_line; k = N_last_line; k++) { x2 = myArray[i + 1, 0]; y2 = myArray[i + 1, 1]; N_first_line_2 N_last_line_2 // myArray_2 : int N_first_line_2, N_last_line_2; N_first_line_2 // N_last_line_2 myArray_2[0, 0] = N_first_line_2; . // sw StreamWriter // D:\MyDocs\MyTest_LevelCurves.txt. // : StreamWriter sw = new StreamWriter( @"D:\MyDocs\MyTest_LevelCurves.txt"); myArray_2[i, j] // WriteLine: for (i = 0; i = (N_x_2-1); i++) for (j = 0; j = (N_y_2-1); j++) sw.WriteLine(myArray_2[i, j]); 33. Visual Basic Visual C++, Visual C# 33.1. Коɞ пɪоцɟɞɭɪы Form1_Load Ƚлɚɜɚ 33. Ɋɚɫчɟɬ ɭɪоɜня VB VC# 160 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : Private Sub Gradient(ByVal x As Single, _ dx = df_dx(x, y) : dy = df_dy(x, y) dist = CSng(Sqrt(dx * dx + dy * dy)) dx = dx / dist : dy = dy / dist End If : ' myArrayVB_2(i, j): Dim N_x_2 As Integer = 20000 myArrayVB_2(i, j) Single , ' i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y: Dim myArrayVB_2(20000, 1) As Single ' . ' myArrayVB_2: Dim N_1_myArrayVB_2 As Integer : Dim ii As Integer = -1 f(x, y) = LevelCurves: Private Sub PlotLevelCurve(ByVal g As Graphics, _ ByVal y_max As Single, _ Optional ByVal step_size As Single = 0.1, _ ' : Dim i, j As Integer . ' 1- myArrayVB(i, j): Dim N_x As Integer = 2000 Dim N_y As Integer = 1 ' 1- myArrayVB(i, j) Single, ' i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y: Dim myArrayVB(N_x, N_y) As Single ' . ' myArrayVB: Dim N_1_myArrayVB As Integer : Ƚлɚɜɚ 33. Ɋɚɫчɟɬ ɭɪоɜня VB VC# Dim x0 As Single : Dim y0 As Single Dim dx As Single : Dim dy As Single ' (x0, y0) LevelCurves: FindPointOnCurve(x0, y0, LevelCurves, _ : num_points = 1 ' LevelCurves: x2 = x0 . ' Do - Loop: Do : Gradient(x2, y2, dx, dy) If Abs(dx) + Abs(dy) 0.001 Then Exit Do tolerance) ' ( ) : 'g.DrawLine(myPen, x1, y1, x2, y2) , : i = i + 2 myArrayVB(i, 0) = x1 N_1_myArrayVB = i + 1 ' . ' ' 2- , : ii = ii + 2 myArrayVB_2(ii, 1) = y1 myArrayVB_2(ii + 1, 0) = x2 . ' : num_points = num_points + 1 ' : &#x x_m;&#xin O;&#xr x2;&#x 000; If x2 x_min Or x2 x_max Or _ 162 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Then Exit Do 4 , : � If num_points = 4 Then If Sqrt((x0 - x2) * (x0 - x2) + (y0 - y2) _ ( ): 'g.DrawLine(myPen, x2, y2, x0, y0) ' : i = i + 2 myArrayVB(i + 1, 1) = y0 N_1_myArrayVB = i + 1 ' . ' 2- , ' : ii = ii + 2 myArrayVB_2(ii, 0) = x2 myArrayVB_2(ii, 1) = y2 . Exit Do End If Do - Loop. ' N_first_line N_last_line ' myArrayVB: Dim N_first_line, N_last_line As Integer N_first_line ' N_last_line myArrayVB(0, 0) = N_first_line myArrayVB(2000, 1): Dim k As Integer x1 = myArrayVB(i, 0) y1 = myArrayVB(i, 1) Ƚлɚɜɚ 33. Ɋɚɫчɟɬ ɭɪоɜня VB VC# g.DrawLine(myPen, x1, y1, x2, y2) N_first_line_2 N_last_line_2 ' myArrayVB_2 : Dim N_first_line_2, N_last_line_2 As Integer N_first_line_2 ' N_last_line_2 myArrayVB_2(0, 0) = N_first_line_2 . ' sw StreamWriter ' D:\MyDocs\MyTest_LevelCurves.txt. ' : Dim sw As StreamWriter = _ ' myArrayVB_2(i, j) WriteLine: For i = 0 To N_x_2 Next Next 34. Visual C++ 34.1. Коɞ ɪиɫоɜɚния изоɛɪɚжɟния // // float M_1 = 2 * (x_max - x_min); float M_2 = 2 * (y_max - y_min); Ƚлɚɜɚ 34. Изоɛɪɚжɟниɟ ɭɪоɜня VC++ VC# или VB 165 // // for (i = 0; i = N_x - 1; i++) for (j = 0; j = N_y - 1; j++) �(())� sr-Close(); // // Pen^ myPen = gcnew Pen(Color::Black, 0); // // N_first_line = Convert::ToInt32(myArrayVC[0, 0]); ) //Ɋиɫɭɟм изоɛɪɚжɟниɟ, нɚчинɚя ɫ ɬочки (1,0; 1,1): i = -1; for (k = N_first_line; k = N_last_line; k++) { y1 = myArrayVC[i, 1]; x2 = myArrayVC[i + 1, 0]; y2 = myArrayVC[i + 1, 1]; �� e-Graphics-DrawLine(myPen, x1, y1, x2, y2); } 35. Visual C++, Visual Basic Visual C++ Кɪɚɬко опишɟм ɫозɞɚɟм пɪоɟкɬ ɬипɚ Visual Basic шɚɛлонɭ ɮɚйл Class1.vb ɫɬɪочкɚми оɛъяɜлɟния оɛычно ɫɚмом Class1.vb импоɪɬиɪоɜɚɬь нɟоɛɯоɞимыɟ пɪоɝɪɚммы пɪоɫɬɪɚнɫɬɜɚ пɪиɜɟɞɟнныɯ ɜышɟ пɪоɟкɬɚɯ шɚɛлонɭ Windows Application), нɚпɪимɟɪ 35.1. Мɟɬоɞ ɪɚɫчɟɬɚ мɚɫɫиɜɚ кооɪɞинɚɬɚми ɬочɟк ɝɪɚɮикɚ Ƚлɚɜɚ 35. Изоɛɪɚжɟниɟ VC++, VB VC# 167 myArrayVB(3, 1) = 300 168 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 35.3. Мɟɬоɞ pictureBox1_Paint ɪиɫоɜɚния // ComponentVB.Class1 myObject = // int i, j; // int N_x = 2001; int N_y = 2; // пɟɪɟм-ɯ ɬипɚ float, // // j = 0,1,2,3,...,(N_y - 1): float[,] myArrayVC = new float[N_x, N_y]; // // // Array myArray = (Array)myObject.myFunction1(); // // клиɟнɬɚ VC: for (i = 0; i = N_x - 1; i++) for (j = 0; j = N_y - 1; j++) myArrayVC[i, j] = Ƚлɚɜɚ 35. Изоɛɪɚжɟниɟ VC++, VB VC# 169 x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1]; e.Graphics.DrawLine(myPen, x1, y1, x2, y2); x1 = x2; y1 = y2; x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1]; e.Graphics.DrawLine(myPen, x1, y1, x2, y2); 35.4. Мɟɬоɞ pictureBox1_Paint ɪиɫоɜɚния пɟɪɟмɟнныɯ ɬипɚ float, //коɝɞɚ i = 0,1,2,3,...,(N_x - 1); // j = 0,1,2,3,...,(N_y - 1): loa;&#xt,20; arrayfloat,2^ myArrayVC = gcnew loa;&#xt,20;arrayfloat,2(N_x, N_y); 170 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1]; x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1]; �� e-Graphics-DrawLine(myPen, x1, y1, x2, y2); VI. 36. 36.1. Мɟɬоɞ ɜыɜоɞɚ ɮоɪмы ɪиɫоɜɚния ɝɪɚɮики 172 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 173 � myForm1-myRendering(); 174 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : � myDevice-BeginScene(); : Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 175 Vertex[0].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex[0].Color = myColor.Aqua.ToArgb(); //ȼɟɪшинɚ 1: //Кооɪɞинɚɬы ɜɟɪшины: Vertex[1].X = 250; Vertex[1].Y = 300; Vertex[1].Z = 0.5f; Vertex[1].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex[1].Color = myColor.Black.ToArgb(); //ȼɟɪшинɚ 2: //Кооɪɞинɚɬы ɜɟɪшины: Vertex[2].X = 50; Vertex[2].Y = 300; Vertex[2].Z = 0.5f; Vertex[2].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex[2].Color = myColor.LightPink.ToArgb(); //Зɚпиɫыɜɚɟм поɬок ɝɪɚɮичɟɫкиɯ ɞɚнныɯ //ɜ оɛъɟкɬ myGraphicsStream: оɛъɟкɬ myGraphicsStream-Write(Vertex); оɛъɟкɬ myVertexBuffer-Unlock(); } Лиɫɬинɝ 36.5. Мɟɬоɞы пɪɟоɛɪɚзоɜɚнныɯ ɜɟɪшин 176 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 177 � myDevice-DrawPrimitives( 178 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Microsoft::DirectX::Direct3D::LockFlags::Discard); CustomVertex: ust;&#xomVe;&#xrtex;&#x::Tr; nsf;&#xorme;Üol;&#xored; arrayCustomVertex::TransformedColored^ Vertex1 = ust;&#xomVe;&#xrtex;&#x::Tr; nsf;&#xorme;Üol;&#xored; gcnew arrayCustomVertex::TransformedColored(3); ( ) Color myColor: Color myColor = Color::FromArgb(0); ToArgb // 32-bit ARGB- myColor: myColor = Color::FromArgb(myColor.ToArgb()); 0: // : Vertex1[0].X = 150; Vertex1[0].Y = 50; Vertex1[0].Z = 0.5f; Vertex1[0].Rhw = 1; // : Vertex1[0].Color = myColor.Aqua.ToArgb(); 1: // : Vertex1[1].X = 250; Vertex1[1].Y = 300; Vertex1[1].Z = 0.5f; Vertex1[1].Rhw = 1; : Vertex1[1].Color = myColor.Black.ToArgb(); 2: // : Vertex1[2].X = 50; Vertex1[2].Y = 300; : Vertex1[2].Color = myColor.LightPink.ToArgb(); // // myGraphicsStream: � myGraphicsStream-Write(Vertex1); : public: static void OnCreateVertexBuffer2(Object^ sender, VertexBuffer^ myVertexBuffer2 = (VertexBuffer^)sender; // myGraphicsStream GraphicsStream // : � GraphicsStream^ myGraphicsStream = myVertexBuffer2- Microsoft::DirectX::Direct3D::LockFlags::Discard); // CustomVertex: Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 179 Vertex2[0].Z = 0.5f; Vertex2[0].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex2[0].Color = myColor.Black.ToArgb(); //ȼɟɪшинɚ 1: //Кооɪɞинɚɬы ɜɟɪшины: Vertex2[1].X = 300.0f; Vertex2[1].Y = 50.0f; Vertex2[1].Z = 0.5f; Vertex2[1].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex2[1].Color = myColor.White.ToArgb(); //ȼɟɪшинɚ 2: //Кооɪɞинɚɬы ɜɟɪшины: Vertex2[2].X = 500.0f; Vertex2[2].Y = 300.0f; Vertex2[2].Z = 0.5f; Vertex2[2].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex2[2].Color = myColor.Blue.ToArgb(); //ȼɟɪшинɚ 3: //Кооɪɞинɚɬы ɜɟɪшины: Vertex2[3].X = 500.0f; Vertex2[3].Y = 50.0f; Vertex2[3].Z = 0.5f; Vertex2[3].Rhw = 1; //Цɜɟɬ ɜɟɪшины: Vertex2[3].Color = myColor.Green.ToArgb(); //Зɚпиɫыɜɚɟм поɬок ɝɪɚɮичɟɫкиɯ ɞɚнныɯ //ɜ оɛъɟкɬ myGraphicsStream: оɛъɟкɬ myGraphicsStream-Write(Vertex2); //Оɬкɪыɜɚɟм ɛɭɮɟɪ ɜɟɪшин: ɜɟɪшин myVertexBuffer2-Unlock(); } Лиɫɬинɝ 36.6. Мɟɬоɞы пɪɟоɛɪɚзоɜɚнныɯ ɜɟɪшин ɮиɝɭɪы 180 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Direct3D: public: bool InitializeDirectX() { try Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 181 182 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // ToArgb // 32-bit ARGB- myColor: myColor = Color::FromArgb(myColor.ToArgb()); // 0: // : Vertex[0].X = -1.0f; Vertex[0].Y = -1.0f; : Vertex[0].Color = myColor.Black.ToArgb(); // 1: // : Vertex[1].X = 1.0f; Vertex[1].Y = -1.0f; // : Vertex[1].Color = myColor.MediumOrchid.ToArgb(); 2: // : Vertex[2].X = 0.0f; Vertex[2].Y = 1.0f; Vertex[2].Z = 0.0f; // : Vertex[2].Color = myColor.LightPink.ToArgb(); : � myVertexBuffer-Unlock(); } // : Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 183 36.7. Мɟɬоɞы пɪɟоɛɪɚзоɜɚнныɯ ɜɟɪшин ɮиɝɭɪы 184 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 (rendering) // : public: void myRendering() if (myDevice == nullptr) Ƚлɚɜɚ 36. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния плоɫкиɯ ɮиɝɭɪ 185 Device^ myDev = (Device^)sender; CullMode, // : �� myDev-RenderState-CullMode = Cull::None; // Direct3D, // : �� myDev-RenderState-Lighting = false; : public: static void OnCreateVertexBuffer( // : ust;&#xomVe;&#xrtex;&#x::Po;&#xsiti;&#xonCo;&#xlore;퀀 arrayCustomVertex::PositionColored^ Vertex = Microsoft::DirectX::Direct3D::LockFlags::None); // ( myColor: Color myColor = Color::FromArgb(0); ToArgb // 32-bit ARGB- myColor: myColor = Color::FromArgb(myColor.ToArgb()); // 0: // : Vertex[0].X = -1.0f; Vertex[0].Y = -1.0f; // : Vertex[0].Color = myColor.Black.ToArgb(); 1: // : Vertex[1].X = -1.0f; Vertex[1].Y = 1.0f; Vertex[1].Z = 0.0f; // : Vertex[1].Color = myColor.MediumOrchid.ToArgb(); 2: // : Vertex[2].X = 1.0f; Vertex[2].Y = -1.0f; Vertex[2].Z = 0.0f; : Vertex[2].Color = myColor.LightPink.ToArgb(); 3: Vertex[3].X = 1.0f; Vertex[3].Y = 1.0f; 186 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : Vertex[3].Color = myColor.Cornsilk.ToArgb(); : � myVertexBuffer-Unlock(); } : 37. 37.1. Мɟɬоɞ ɜыɜоɞɚ ɮоɪмы ɪиɫоɜɚния ɝɪɚɮики 188 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 189 : � myDevice-Present(); , : public: void OnCreateDevice(Object^ sender, EventArgs^ e) { : myVertexBuffer = gcnew VertexBuffer( ust;&#xomVe;&#xrtex;&#x::Po;&#xsiti;&#xonNo;&#xrmal; typeidCustomVertex::PositionNormal, 100, myDev, Microsoft::DirectX::Direct3D::Usage::WriteOnly, // � myVertexBuffer-Created: � myVertexBuffer-Created += } // : 190 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 . // : float zoom1 = -1; Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 191 ��� myDevice-Lights[0]-Diffuse = Color::DarkTurquoise; �� myDevice-Lights[0]-Direction = Vector3( (float)Math::Cos(Environment::TickCount / 250.0f), 1.0f, (float)Math::Sin(Environment::TickCount / 250.0f)); //ȼключɚɟм оɫɜɟщɟниɟ: оɫɜɟщɟниɟоɫɜɟщɟниɟ myDevice-Lights[0]-Enabled = true; //ȼключɚɟм нɟмноɝо оɬɪɚжɟнноɝо (Ambient) //ɪɚɜномɟɪно ɪɚɫɫɟянноɝо ɫɜɟɬɚ: ɫɜɟɬɚɫɜɟɬɚ myDevice-RenderState-Ambient = Color::FromArgb(0x202020); } //Оɫɬɚнɚɜлиɜɚɟм ɜɪɚщɟниɟ ɮиɝɭɪы и измɟняɟм ɟɟ ɪɚзмɟɪы //ɜо ɜɪɟмя измɟнɟния ɪɚзмɟɪоɜ ɮоɪмы: protected: void OnResize(EventArgs^ e) { ɮоɪмы myPause = ((this-WindowState == ɮоɪмы FormWindowState::Minimized) || !this-Visible); } Ɍɟпɟɪь ɜ ɮɚйлɟ Form1.cpp нɚɯоɞим мɟɬоɞ Main, коммɟнɬиɪɭɟм мɟɬоɞɟ ɚɜɬомɚɬичɟɫки ɫɝɟнɟɪиɪоɜɚнный ɜыɜоɞɚ Form1 ɪиɫоɜɚния ɝɪɚɮики ). 37.3. Коɞ ɜыɜоɞɚ ɮоɪмы ɪиɫоɜɚния ɝɪɚɮики 192 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 } Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 193 194 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Z - : �� myDevice-RenderState-ZBufferEnable = true; : �� myDevice-RenderState-Lighting = true; } // . : public: static void OnCreateVertexBuffer( // : ust;&#xomVe;&#xrtex;&#x::Po;&#xsiti;&#xonNo;&#xrmal; arrayCustomVertex::PositionNormal^ Vertex = Microsoft::DirectX::Direct3D::LockFlags::None); // ( ) PositionNormal // 100 : for (int i = 0; i 50; i++) // . // . // : float zoom1 = -1.5; Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 195 y: �� myDevice-Transform-World = Matrix::RotationAxis( 1, (float)Math::Sin(Environment::TickCount / 250.0f)), // (view matrix): �� myDevice-Transform-View = Matrix::LookAtLH( Vector3(0.0f, 3.0f, -5.0f), (projection matrix) // : �� myDevice-Transform-Projection = // ARGB: 196 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 37.5. Мɟɬоɞы пɪɟоɛɪɚзоɜɚнныɯ ɜɟɪшин ɮиɝɭɪы Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 197 (rendering) // : public: void myRendering() 198 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 gcnew System::EventHandler( } // : Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 199 : Vertex[2 * i + 1].Position = 200 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // myTexture // Texture: static Texture^ myTexture = nullptr; Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 201 // : 202 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 CullMode, // : �� myDev-RenderState-CullMode = Cull::None; : �� myDev-RenderState-Lighting = false; // Z - : �� myDevice-RenderState-ZBufferEnable = true; Texture_1: myTexture = TextureLoader::FromFile(myDev, "D:\\MyDocs\\Texture_1.bmp"); } . : public: static void OnCreateVertexBuffer( { // : ust;&#xomVe;&#xrtex;&#x::Po;&#xsiti;&#xonNo;&#xrmal;&#xText;&#xured; (arrayCustomVertex::PositionNormalTextured^) � myVertexBuffer-Lock(0, Microsoft::DirectX::Direct3D::LockFlags::None); ( ) PositionNormal // 100 : for (int i = 0; i 50; i++) { // . // : float zoom1 = -1.5; Ƚлɚɜɚ 37. Мɟɬоɞикɚ пɪоɟкɬиɪоɜɚния пɪоɫɬɪɚнɫɬɜɟнныɯ ɮиɝɭɪ 203 VII. Microsoft 38. Пɪоɞолжɚɟм ɪɚзɪɚɛɚɬыɜɚɬь мɟɬоɞолоɝию мɭльɬимɟɞиɚ пɪимɟɪɟ инɬɟɝɪɚции Visual Basic очɟнь попɭляɪной пɟɪɫпɟкɬиɜной ɬɟɯнолоɝиɟй Microsoft Agent. Microsoft Agent пɪоɝɪɚммнɚя ɬɟɯнолоɝия ɟɫɬɟɫɬɜɟнныɯ чɟлоɜɟкɚ компьюɬɟɪɚ чɟɪɟз ɫозɞɚниɟ ноɜыɯ ɞиɚло ɝоɜыɯ инɬɟɪɮɟйɫоɜ пɪоɝɪɚммныɯ ɜозможноɫɬь ɪɚɛоɬчикɚм ɜключɚɬь ɚнимиɪоɜɚнныɟ пɟɪɫонɚжи пɪиложɟния ɫɬɪɚницы пɟɪɫонɚжи моɝɭɬ ɝоɜоɪиɬь пɪи пɪоɝɪɚммы ɫɪɟɞɫɬɜɚ ɯɚнизмɚ инɫɬɪɭмɟнɬɚ пɪɟоɛɪɚзоɜɚɬɟля пɟɪɟɜоɞɚ (a text-to-speech engine - TTS), ɜоɫпɪоизɜоɞиɬь ɞɚжɟ пɪинимɚɬь ɪɚзɝоɜоɪныɟ ɪɚɫпознɚɜɚния (speech recognition engine). Microsoft Agent ɪɚзɪɚɛоɬчикɚм ɪɚɫшиɪиɬь инɬɟɪɮɟйɫ пɪɟɞɟлы ɪɚɫпɪоɫɬɪɚнɟнныɯ ɫɟɝоɞня ɜзɚимоɞɟйɫɬɜий мыши Ɍɟɯнолоɝия Microsoft Agent можɟɬ ɛыɬь пɪимɟнимɚ оɝɪомноɟ ɪолɟй коɬоɪыɟ ɪɚзɪɚɛоɬчик кɚчɟɫɬɜɟ ɫозɞɚɬь пɟɪɫонɚжɟй Microsoft Agent пɪимɟниɬь пɪоɝɪɚммɚɯ пɪи пɟɪɫонɚжɟй компьюɬɟɪ пɪоɜɚйɞɟɪɚ можɟɬ пɪиɜɟɬɫɬ ноɜыɯ покɚзом ɫооɛщɟниɟм компьюɬɟɪ ɜключɟн пɪиложɟниɟ пɪоɫмоɬɪɟн ɞɪɭжɟɫɬɜɟннɚя оɛɭчɚющɚя пɪоɝɪɚммɚ пɟɪɫонɚжɚми помоɝɚɬь поэɬɚпном оɫɜоɟнии ноɜоɝо мɚɬɟɪиɚлɚ пɟɪɫонɚж моɝ пɪɟɞɫɬɚɜиɬь пɪɟɞɭпɪɟжɞɟниɟ чɬо ноɜɚя ɬɪоннɚя почɬɚ пɪиɛылɚ зɚɬɟм пɪɟɞложиɬь пɪочиɬɚɬь помощник ɜыполниɬь поиɫк инɮоɪмɚции Инɬɟɪнɟɬɟ зɚɬɟм пɪочиɬɚɬь инɮоɪмɚцию Ɍɟɯнолоɝия Microsoft Agent пɪɟɞнɚзнɚчɟнɚ пɪɟжɞɟ ɜɫɟɝо ɪɚзɪɚɛоɬчикоɜ пользɭющиɯ поɞɞɟɪжиɜɚюɬ компонɟнɬнɭю оɛъɟкɬнɭю (Component Object Model COM) инɬɟɪɮɟйɫы ɭпɪɚɜлɟния Microsoft ActiveX. ɜключɚюɬ нɚпɪимɟɪ , Microsoft Visual Studio (Visual C++, Visual Basic, Visual FoxPro), Microsoft Office (Visual Basi c for Applications), Mi 39. 39.1. члɟноɜ инɬɟɪɮɟйɫɚ ɝлоɛɚльныɯ пɟɪɟмɟнныɯ Form1_Load зɚпиɫыɜɚɟм ɫоɝлɚɫно поɫɬɚноɜкɟ ɜɫɟɯ пɟɪɫонɚжɟй мɟɬоɞ Form1_Load 39.2. Зɚɝɪɭзкɚ пɟɪɫонɚжɟй ɭпɪɚɜлɟния �� axAgent1-Characters-Load("Genie", DATAPATH_1); ��myGenie = axAgent1-Characters-Character("Genie"); // �myGenie-LanguageID = 0x409; // �textBox1-Text = " �� axAgent2-Characters-Load("Merlin", DATAPATH_2); ��myMerlin = axAgent2-Characters-Character("Merlin"); // �myMerlin-LanguageID = 0x409; 206 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // �textBox2-Text = " �� axAgent3-Characters-Load("Peedy", DATAPATH_3); ��myPeedy = axAgent3-Characters-Character("Peedy"); // �myPeedy-LanguageID = 0x409; // �textBox3-Text = " // �� axAgent4-Characters-Load("Robby", DATAPATH_4); ��myRobby = axAgent4-Characters-Character("Robby"); // �myRobby-LanguageID = 0x409; // �textBox4-Text = " Ƚлɚɜɚ 39. Мɟɬоɞикɚ ɭпɪɚɜлɟния мɭльɬипликɚционными пɟɪɫонɚжɚми 207 // mySpeech = "Genie"; �� myRobby-Commands-Add( mySpeech, mySpeech, mySpeech, nullptr, nullptr); Чɬоɛы покɚзɚ мониɬоɪɚ пɟɪɜоɝо пɟɪɫо Genie ( поɫлɟ пɟɪɜой Покɚзɚɬь Form1 ɪиɫ . 39.5) ɞɜɚжɞы щɟлкɚɟм кнопкɭ ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния Properties ɜыɛиɪɚɟм зɚɝолоɜок button1 Events имɟни Click). Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ button1_Click коɬоɪый поɫлɟ ɫоɝлɚɫно поɫɬɚноɜкɟ пɟɪɜоɝо пɟɪɫо пɪинимɚɟɬ ɫлɟɞɭющий 39.3. Мɟɬоɞ кнопки Покɚзɚɬь 208 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 39.5. Мɟɬоɞ кнопки Покɚзɚɬь Ƚлɚɜɚ 39. Мɟɬоɞикɚ ɭпɪɚɜлɟния мɭльɬипликɚционными пɟɪɫонɚжɚми 209 Чɬоɛы пɟɪɫонɚж мониɬоɪɚ пɪи ɋкɪыɬь Попɭ Form1 ( ɪиɫ . 39.5), ɞɜɚжɞы щɟлкɚɟм ɪɟɞɚкɬиɪо Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ button6_Click коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɬɚкой 39.8. Мɟɬоɞ кнопки ɋкɪыɬь Попɭɝɚя Ⱥнɚлоɝично покɚзɚ мониɬоɪɚ чɟɬɜɟɪɬоɝо пɟɪɫонɚжɚ Robby ( Ɋоɛоɬ пɪи Ɋоɛо Form1 ( ɪиɫ щɟлкɚɟм кнопкɭ ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ button7_Click ), коɬоɪый поɫлɟ пɪинимɚɟɬ ɬɚкой ɜиɞ 39.9. Мɟɬоɞ кнопки Покɚзɚɬь 210 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 коɞɚ пɪинимɚɟɬ ɬɚкой ɜиɞ 39.10. Мɟɬоɞ ɋкɪыɬь 39.11. Мɟɬоɞ оɛɪɚɛɚɬыɜɚющий щɟлчок пɟɪɫонɚжɭ Genie 39.12. Мɟɬоɞ оɛɪɚɛɚɬыɜɚющий щɟлчок пɟɪɫонɚжɭ Merlin 39.13. Мɟɬоɞ оɛɪɚɛɚɬыɜɚющий щɟлчок пɟɪɫонɚжɭ Peedy Ƚлɚɜɚ 39. Мɟɬоɞикɚ ɭпɪɚɜлɟния мɭльɬипликɚционными пɟɪɫонɚжɚми 211 " 39.14. Мɟɬоɞ оɛɪɚɛɚɬыɜɚющий щɟлчок пɟɪɫонɚжɭ Robby 39.15. Мɟɬоɞ чɬоɛы ɜыполнял ɝолоɫоɜыɟ 212 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : � myGenie-Hide(0); Form1 // "x,y" : Ƚлɚɜɚ 39. Мɟɬоɞикɚ ɭпɪɚɜлɟния мɭльɬипликɚционными пɟɪɫонɚжɚми 213 Ⱥнɚлоɝично ɫлɟɞɭющɟɝо пɟɪɫонɚжɚ Properties ɜыɛиɪɚɟм зɚɝолоɜок ɭпɪɚɜлɟния axAgent3 ɜклɚɞкɟ Events ɞɜɚжɞы щɟлкɚɟм ɫоɛыɬия Command. Пояɜляɟɬɫя ɮɚйл Form1.h шɚɛлоном мɟɬоɞɚ axAgent3_Command), коɬоɪый коɞɚ ɚлɝоɪиɬмɭ пɪинимɚɟɬ 39.17. Мɟɬоɞ чɬоɛы Попɭɝɚй ɝолоɫоɜыɟ комɚнɞы 214 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 коɞɚ ɚлɝоɪиɬмɭ пɪинимɚɟɬ 39.18. Мɟɬоɞ чɬоɛы Ɋоɛоɬ ɜыполнял ɝолоɫоɜыɟ 40. 40.1. члɟноɜ инɬɟɪɮɟйɫɚ ɝлоɛɚльныɯ пɟɪɟмɟнныɯ Form1_Load зɚпиɫыɜɚɟм ɫоɝлɚɫно поɫɬɚноɜкɟ ɜɫɟɯ пɟɪɫонɚжɟй мɟɬоɞ Form1_Load 40.2. Зɚɝɪɭзкɚ пɟɪɫонɚжɟй ɭпɪɚɜлɟния 216 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // . .: � myPeedy-LanguageID = 0x409; axAgent4: �� axAgent4-Characters-Load("Robby", DATAPATH_4); . .: � myRobby-LanguageID = 0x409; , , // , Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй 217 ɫлɟɞɭя ɚлɝоɪиɬмɭ пɟɪɜом пɚɪɚɝɪɚɮɟ зɚпиɫыɜɚɟм ɬɚкой чɬоɛы окнɟ ɫпиɫком ComboBox1 пɟɪɫонɚжɟй (Genie, Merlin, Peedy, Robby) ɜыɛиɪɚɟм кɚкой оɞин пɟɪɫонɚж пɪɚɜоɟ окно ComboBox2 пɪоɝɪɚммɚ зɚноɫилɚ компонɟнɬоɜ коɬоɪыɟ зɚɝɪɭзили компьюɬɟɪ опиɫɚнной ɫɯɟмɟ 70 ɚнимɚций ɜыɛɪɚнноɝо пɟɪɫонɚжɚ Properties ɜыɛиɪɚɟм comboBox1 ( элɟмɟнɬɭ ɭпɪɚɜлɟния comboBox1) Events имɟни Пояɜляɟɬɫя ɮɚйл Form1.h шɚɛлоном коɬоɪый поɫлɟ коɞɚ ɚлɝоɪиɬмɭ ɫлɟɞɭющий 40.3. Мɟɬоɞ окнɚ ɫпиɫком comboBox1. 218 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 IEnumerator^ myEnumerator1 = ��� axAgent1-Characters-Character("Genie")- Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй 219 { // // while �(myEnumerator3-MoveNext()) { } } // // �if (comboBox1-SelectedIndex == 3) { // // while �(myEnumerator4-MoveNext()) { } } ɫлɟɞɭя ɚлɝоɪиɬмɭ пɟɪɜом пɚɪɚɝɪɚɮɟ зɚпиɫыɜɚɟм ɬɚкой чɬоɛы окнɟ ɫпиɫком comboBox1 чɟɬыɪɟɯ пɟɪɫонɚжɟй (Genie, Merlin, Peedy, Robby) ɜыɛиɪɚɟм кɚкой оɞин пɟɪɫонɚж пɪɚɜом окнɟ ɫпиɫком comboBox2 70 пɪɟɞыɞɭщɟɝо пɟɪɫонɚжɚ пояɜляɟɬɫя ɜыɛɪɚнный пɟɪɫонɚж пɪоизноɫиɬ ɬɟкɫɬ ɜыполняɟɬ ɜыɛɪɚннɭю ɚнимɚцию Properties ɜыɛиɪɚɟм comboBox2 ( элɟмɟнɬɭ ɭпɪɚɜлɟния comboBox2) Events имɟни Пояɜляɟɬɫя ɮɚйл Form1.h шɚɛлоном коɬоɪый поɫлɟ коɞɚ ɚлɝоɪиɬмɭ ɫлɟɞɭющий 40.5. Мɟɬоɞ окнɚ ɫпиɫком comboBox2. 220 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 : � if (comboBox1-SelectedIndex == 0) : � myMerlin-Hide(0); � myPeedy-Hide(0); : � myGenie-StopAll(nullptr); // Form1 // "x, y" _ // : Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй 221 // : � myMerlin-Play("RestPose"); // comboBox1 // : � if (comboBox1-SelectedIndex == 2) : � myGenie-Hide(0); � myMerlin-Hide(0); : � myPeedy-StopAll(nullptr); // Form1 // "x, y" _ // : 222 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 mySpeech = " ɫлɟɞɭя ɚлɝоɪиɬмɭ пɟɪɜом пɚɪɚɝɪɚɮɟ зɚпиɫыɜɚɟм ɬɚкой чɬоɛы щɟлкнɟм окно TextBox, пɟɪɫонɚж попɪоɫиɬ зɚпиɫɚɬь окно зɚпишɟм окно TextBox ɬɟкɫɬ ɪɭɫɫком языкɟ пɟɪɫонɚж пɪоизнɟɫɟɬ щɟлкɚɟм кнопкɭ ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния Properties ɜыɛиɪɚɟм зɚɝолоɜок button1 Events ɞɜɚжɞы ɫоɛыɬия Click). Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 40.6. Мɟɬоɞ кнопки { " " { Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй 223 " " } { " " } " " } } else { � if (comboBox1-SelectedIndex == 2) 224 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 � if (comboBox1-SelectedIndex == 3) пɪɟɞыɞɭщɟй пɪиɜɟли мɟɬоɞикɭ пɪоɝɪɚммɭ ɭпɪɚɜлɟния пɟɪɫо пɪи помощи нɚшиɯ ɝолоɫоɜыɯ комɚнɞ микɪоɮон зɚɞɚннɭю ɭмолчɚнию комɚнɞɭ Hide ( ɋкɪыɬь ), пɟɪɫонɚж оɞно зɚɞɚнныɯ ɭмолчɚнию пɟɪɫонɚжɟй (Genie, Merlin, Peedy, Robby), эɬоɬ озɜɭчɟнный пɟɪɫонɚж ɫмɟняɟɬ пɪɟɞыɞɭщий пользоɜɚ ɝолоɫоɜɭю комɚнɞɭ нɚпɪимɟɪ Ƚлɚɜɚ 40. ȼыɜоɞ ɜыɫɬɭплɟний ɚнимɚций пɟɪɫонɚжɟй 225 �� IAgentCtlUserInput^(e-userInput); 41. 41.1. члɟнɚ инɬɟɪɮɟйɫɚ ɝлоɛɚльныɯ пɟɪɟмɟнныɯ 41.2. Зɚɝɪɭзкɚ пɟɪɫонɚжɚ ɪɟчɟй ɚнимɚций Ƚлɚɜɚ 41. Мɟɬоɞикɚ ɫозɞɚния компьюɬɟɪныɯ мɭльɬɮильмоɜ 227 : mySpeech = " " " ..."; � myGenie-Speak(mySpeech, nullptr); , , // , 15000 ( 15 228 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 коɞ чɬоɛы поɫлɟ щɟлчкɚ мышью поɫлɟ нɚпɪимɟɪ пɟɪɜоɝо пɟɪɟключɚɬɟля пɟɪɟключɚɬɟлю пɟɪɫонɚж пɪоизноɫил покɚзыɜɚл ɜыɛɪɚннɭю эɬоɝо ɞɜɚжɞы щɟлкɚɟм пɟɪɟключɚɬɟль ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния Properties зɚɝолоɜком radioButton1 ɜклɚɞкɟ Events щɟлкɚɟм ɫоɛыɬия CheckedChanged). Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ ), коɬоɪый поɫлɟ пɪинимɚɟɬ ɬɚкой ɜиɞ 41.4. Мɟɬоɞ пɟɪɟключɚɬɟля Ⱥнɚлоɝично поɫлɟɞоɜɚɬɟльно щɟлкɚɟм кɚжɞомɭ поɫлɟɞɭющɟмɭ пɟɪɟ ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния шɚɛлон мɟɬоɞɚ ɬɚкой пɪɟɞыɞɭщɟм ɬолько ɫɬɪокɭ пɪɟɞыɞɭщɟй ɚнимɚ ɫооɬɜɟɬɫɬɜɭющɭю ɫɬɪокɭ ɞɟɜяɬи ɫɬɪок чиɫлɭ ɬɚɜшиɯɫя пɟɪɟключɚɬɟлɟй ноɜой Ƚлɚɜɚ 41. Мɟɬоɞикɚ ɫозɞɚния компьюɬɟɪныɯ мɭльɬɮильмоɜ 229 42. оɫноɜɟ пɪоɝɪɚмм Visual C++, ɪɚзɪɚɛоɬɚнныɯ пɪɟɞыɞɭщиɯ пɟɪь можɟм пɪоɟкɬиɪоɜɚɬь компьюɬɟɪныɟ иɝɪы Инɬɟɪнɟɬ ɞɪɭɝиɟ пɪиложɟния ɫложноɟ пɪиложɟниɟ ɪɚɫɫмоɬɪим пɪимɟɪɟ ɪɟɚльноɝо инɬɟɪнɟɬ поɞ Peedys Pizza Palace, коɬоɪом (Peedy) пɪимɟɪ ɪɚзɪɚɛоɬɚн ɫɚмой коɪпоɪɚциɟй Microsoft мɭльɬимɟɞийной пɪоɝɪɚммной ɬɟɯнолоɝии плɚɬɮоɪмы ) Microsoft Agent ɜɟɪɫии 2.0. мɚɝɚзин поɫɬɚноɜкɟ коɬоɪый ɫоɫɬоиɬ оɫноɜныɯ эпизоɞоɜ Эпизоɞ 1. Поɫлɟ зɚɝɪɭзки ɛɪɚɭзɟɪɚ 43. 43.1. члɟноɜ инɬɟɪɮɟйɫɚ ɝлоɛɚльныɯ пɟɪɟмɟнныɯ Form1_Load зɚпиɫыɜɚɟм ɫоɝлɚɫно поɫɬɚноɜкɟ ɜɫɟɯ пɟɪɫонɚжɟй мɟɬоɞ Form1_Load 43.2. Зɚɝɪɭзкɚ пɟɪɫонɚжɟй ɭпɪɚɜлɟния 232 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 axAgent4: �� axAgent4-Characters-Load("Robby", DATAPATH_4); �� myRobby = axAgent4-Characters-Character("Robby"); Form1 // "x, y" : Ƚлɚɜɚ 43. Поɫɬɪоɟниɟ ɝɪɚɮикɚ ɬочкɚм MS Agent 233 Чɬоɛы пɟɪɫонɚж нɚпɪимɟɪ Попɭɝɚй (Peedy) ноɟ ɜɪɟмя щɟлкɚɟм ɜɬоɪоɝо компонɟнɬɚ Timer пɚнɟли Properties эɬоɝо компонɟнɬɚ ɫɜойɫɬɜɟ Interval зɚпиɫыɜɚɟм ɞɚнноɟ ɜɪɟмя нɚпɪи , 10000 миллиɫɟкɭнɞ или 10 ɫɜойɫɬɜɟ Enabled True). ɞɜɚжɞы эɬоɝо компонɟнɬɚ Timer ( Properties Events ɞɜɚжɞы ɟɞинɫɬɜɟнноɝо ɬɚм Tick). Пояɜляɟɬɫя Form1.h шɚɛлоном timer2_Tick коɬо поɫлɟ зɚпиɫи коɞɚ пɪинимɚɟɬ 43.4. Мɟɬоɞ ɜызоɜɚ пɟɪɫонɚжɚ Interval // 234 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // // mySpeech = " � myRobby-Speak(mySpeech, nullptr); // �timer3-Enabled = false; ɜыɜоɞɚ экɪɚн чɟɬыɪɟɯ пɟɪɫонɚжɟй Чɬоɛы оɞин пɟɪɫонɚжɟй нɚпɪимɟɪ (Genie) пɟɪиоɞичɟɫки зɚɞɚнным ɜɪɟмɟни Timer) поɜɬоɪял инɫɬɪɭкцию нɚпɪимɟɪ ɝɪɚɮик ɞɚнной чɟɬɜɟɪɬоɝо Timer Properties ɞля компонɟнɬɚ Interval инɬɟɪɜɚл ɜɪɟмɟни нɚпɪимɟɪ , 18000 миллиɫɟкɭнɞ 18 ɫɟкɭнɞ ɬɚймɟɪ ɫɜойɫɬɜɟ Enabled ɜыɛиɪɚɟм True). ɞɜɚжɞы щɟлкɚɟм эɬоɝо компонɟнɬɚ Timer ( Properties ɜклɚɞкɟ Events ɞɜɚжɞы ɟɞинɫɬɜɟнноɝо ɬɚм Tick). Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ timer4_Tick коɬоɪый поɫлɟ пɪинимɚɟɬ 43.6. Мɟɬоɞ пɪоизнɟɫɟния инɫɬɪɭкции Interval оɬличиɟ пɪɟɞыɞɭщиɯ оɫɬɚнɚɜлиɜɚɟм ɝɟнɟɪиɪоɜɚниɟ ɫоɛыɬия Tick ( ɬɟм ɫɚмым ɜыключɚɟм ɬɚймɟɪ ɜозможноɫɬь пɟɪɫонɚжɭ ɝоɜоɪиɬь поɪ покɚ щɟлкнɟм пɪɚ кнопкой ɜыɛɟɪɟм комɚнɞɭ Hide ( ɋкɪыɬь ). Чɬоɛы пɪи помощи кнопки 1. Поɫɬɪоиɬь ɝɪɚɮик пояɜилɫя ɝɪɚɮик нɚльной y = f(x), ɪɟжимɟ пɪоɟкɬиɪо ɪиɫ . 43.1), Click Properties Events. Пояɜляɟɬɫя шɚɛлон коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɬɚкой 43.7. Мɟɬоɞ оɛɪɚɛоɬки щɟлчкɚ цɟлью ɪиɫоɜɚния ɝɪɚɮикɚ // Ƚлɚɜɚ 43. Поɫɬɪоɟниɟ ɝɪɚɮикɚ ɬочкɚм MS Agent 235 float x1, y1, x2, y2, x3, y3, x4, y4; float x_O, y_O, x_end, y_end; // x_O = 20; y_O = 20; // �x1 = Convert::ToSingle(textBox1-Text) + x_O; �y1 = -Convert::ToSingle(textBox2-Text) + � pictureBox1-Height - y_O; �x2 = Convert::ToSingle(textBox3-Text) + x_O; �y2 = -Convert::ToSingle(textBox4-Text) + � pictureBox1-Height - y_O; �x3 = Convert::ToSingle(textBox5-Text) + x_O; �y3 = -Convert::ToSingle(textBox6-Text) + � pictureBox1-Height - y_O; �x4 = Convert::ToSingle(textBox7-Text) + x_O; �y4 = -Convert::ToSingle(textBox8-Text) + � pictureBox1-Height - y_O; // // // �g = pictureBox1-CreateGraphics(); // // �x_end = pictureBox1-Width - y_O; � g-DrawLine(myPenAxes, �x_O, pictureBox1-Height - y_O, �x_end, pictureBox1-Height - y_O); // � g-DrawLine(myPenAxes, �x_O, pictureBox1-Height - y_O, x_O, y_O); // // �g-DrawLine(myPen, x1, y1, x2, y2); �g-DrawLine(myPen, x2, y2, x3, y3); �g-DrawLine(myPen, x3, y3, x4, y4); Чɬоɛы пɪи помощи 2. ɝɪɚɮик ɝɪɚɮик ɮɭнкционɚльной y = f(x) щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚ ɪиɫ . 43.1), Click Properties Events. 236 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Пояɜляɟɬɫя шɚɛлон коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɬɚкой 43.8. Мɟɬоɞ оɛɪɚɛоɬки щɟлчкɚ кнопкɟ // // // �g = pictureBox1-CreateGraphics(); // VIII. 44. ɭɫлоɜно пɪиняли пɪиложɟнии оɛъɟкɬоɜ ɫпɪоɟкɬиɪоɜɚны ɜыɜоɞяɬɫя иɫпользоɜɚния или оɬмɟчɚлоɫь нɚпɪимɟɪ ɜɪɟмɟни ɭпɪɚɜлɟния пɪимɟɪɭ кнопки ɚнимɚ Ⱥнимɚция мноɝиɯ ɬɪɟɛɭɟɬɫя пɪɚкɬикɟ покɚзɚɬь конɫɬɪɭкцию ɪɚɛоɬɟ ɜɪɟмɟни покɚзɚɬь кɚкой пɪоцɟɫɫ нɚпɪимɟɪ изɝоɬоɜлɟния ɞɟɬɚли ɜɟщи ɞинɚмикɟ мɟɪɟ поэɬɚпноɝо изɝоɬоɜлɟния позɜоляɟɬ ɯоɞящɟɟ нɟɞоɫɬɚɬки пɪоɟкɬиɪоɜɚния нɚиɛолɟɟ ɪɚционɚльноɝо опɬимɚльноɝо ɋлɟɞоɜɚɬɟльно мɟɬоɞикɚ ɪɚзɪɚɛоɬки пɪо оɫноɜɟ иɫпользоɜɚния ɫɬɚнɞɚɪɬныɯ мɟɬоɞоɜ ɛиɛлиоɬɟки кɚкой плɚɬɮоɪмы пɪоɝɪɚммиɪоɜɚния оɫноɜɟ мɚɬɟмɚ зɚɜиɫимоɫɬɟй ɪиɫоɜɚния поɫлɟɞоɜɚɬɟльныɯ оɛъɟкɬоɜ эɬиɯ ɜиɞɟ ɝɪɚɮичɟɫкиɯ ɪɚзɪɚɛоɬки Visual C++ ɜɚɪиɚнɬоɜ пɪи элɟмɟнɬоɜ ɭпɪɚɜлɟния пɪоɝɪɚмм Нɚпɪимɟɪ оɞин ɜɚɪиɚнɬоɜ иɫпользɭɟɬ ɭпɪɚɜлɟния StatusBar, коɬоɪоɝо ɪɚɫполɚɝɚюɬ пɚнɟли коɬоɪыɯ мɟщɚюɬ ɝоɬоɜыɟ ɚнимɚционныɟ ɪиɫɭнки StatusBar. Ⱦɪɭɝой ɜɚɪиɚнɬ оɫноɜɚн пɪимɟнɟнии Matrix ( пɪоɫɬɪɚнɫɬɜɚ System::Drawing::Drawing2D), коɬоɪый пɪи помощи ɫɜоиɯ мɟɬоɞоɜ пɪоизɜоɞиɬ пɪɟ оɛɪɚзоɜɚния пɟɪɟмɟщɟниɟ поɜоɪоɬ ɪɚɫɬяжɟниɟ ɫжɚɬиɟ кɚкой лиɛо ɝɟомɟɬɪичɟ ɮиɝɭɪы ɟɫɬɟɫɬɜɟнно иɫпользɭюɬ компонɟнɬ ɬɚймɟɪ Timer, пɪи помощи коɬоɪоɝо зɚɞɚюɬɫя инɬɟɪɜɚлы ɜɪɟмɟни измɟнɟния положɟния оɛъɟкɬɚ оɛɪɚзом ɫозɞɚɜɚɟмɭю ɝлоɛɚльнɭю ɜычиɫлиɬɟльнɭю локɚльнɭю поɞɫиɫɬɟмɭ ɚнимɚционныɯ пɪоɝɪɚмм ɋнɚчɚлɚ пɪоɝɪɚммы ноɫиɬь ɯɚɪɚкɬɟɪ Зɚɬɟм они ɫɬɚноɜиɬьɫя ɜɫɟ ɫложными можно иɫпользоɜɚɬь ɫпɪɚɜочнɭю коɬоɪой можно оɬɞɟльныɟ пɪоɝɪɚмм ɜɫɬɚɜляɬь ɪɚзɪɚɛɚɬыɜɚɟмоɟ ɫложноɟ пɪиложɟ ɫложными эɮɮɟкɬɚми 45. 45.1. Мɟɬоɞ ɜыɜоɞɚ коɪоɬкоɝо ɜɪɟмɟни ɛɟз � statusBarPanel1-Text = Ƚлɚɜɚ 45. циɮɪоɜой инɞикɚциɟй пɪоɝɪɟɫɫɚ ɞɚɬой 239 � statusBarPanel1-Text = 240 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 45.8. Мɟɬоɞ ɜыɜоɞɚ минɭɬ чɚɫоɜ 46.1. Коɞ пɪоɟкɬиɪоɜɚния 242 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 0, 100, 200, 100); 100, 0, 100, 200); 46.2. Коɞ ɪиɫɭнкɚ 47.1. Коɞ пɪоɟкɬиɪоɜɚния x = x_centre + r * Convert::ToSingle( Math::Cos(2 * Math::PI * angle / 360)); y = y_centre + r * Convert::ToSingle( Math::Sin(2 * Math::PI * angle / 360)); ��e-Graphics-DrawLine(gcnew Pen(Color::Black, 3), x_centre, y_centre, x, y); 244 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 47.2. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. 47.3. Мɟɬоɞ компонɟнɬɚ Timer. � pictureBox1-Refresh(); 48. 48.1. Коɞ пɪоɟкɬиɪоɜɚния пɪɟоɛɪɚзоɜɚния ɮиɝɭɪы 246 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 FigureDraw // : public: void FigureDraw(Graphics^ myGraphics, int j) // : Ƚлɚɜɚ 48. ɍпɪɚɜляɟмоɟ ɮиɝɭɪы 247 Чɬоɛы Interval компонɟнɬɚ Timer зɚɜиɫимоɫɬи Value ползɭнкɚ ɭпɪɚɜлɟния TrackBar, ɞɜɚжɞы элɟмɟнɬ ɭпɪɚɜлɟния TrackBar ɪɟжимɟ пɪоɟкɬиɪоɜɚния Form9.h ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 48.3. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɞɜɚжɞы компонɟнɬɚ Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния ). Form9.h шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 48.4. Мɟɬоɞ компонɟнɬɚ Timer. 49.1. ɭпɪɚɜлɟния PictureBox. 49.2. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. 49.3. Мɟɬоɞ компонɟнɬɚ Timer. Ƚлɚɜɚ 49. ɍпɪɚɜляɟмоɟ зɚполнɟниɟ ɮиɝɭɪ 249 � timer1-Enabled = false; { 49.1 оɞнɭ ɫɬɪокɭ мɟɬоɞом FillRectangle FillPie 50.1. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɞɜɚжɞы компонɟнɬɚ Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния ). Form13.h шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 50.2. Мɟɬоɞ компонɟнɬɚ Timer. // // � label1-ForeColor = Color::Black; // myText = true; else { � label1-ForeColor = Color::White; // } 51. 51.1. ɝлоɛɚльныɯ пɟɪɟмɟнныɯ radius_of_ball_x, radius_of_ball_y, move_of_ball_x, move_of_ball_y, width_of_bitmap_of_ball, height_of_bitmap_of_ball, width_of_margin_of_bitmap, height_of_margin_of_bitmap; щɟлкɚɟм Form1 ɪɟжимɟ пɪоɟкɬиɪоɜɚния Form1.h шɚɛлоном мɟɬоɞɚ коɬоɪый поɫлɟ пɪи ɬɚкой 51.2. Мɟɬоɞ Form1_Load 252 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 � Math::Min(width_of_rectangle / myGraphics-DpiX, �myGraphics-DpiX); �myGraphics-DpiY); move_of_ball_x = Convert::ToInt32(Math::Max(1, move_of_ball_y = Convert::ToInt32(Math::Max(1, Ƚлɚɜɚ 51. Мɟɬоɞикɚ лɟɬɚющиɯ пɪɟɞмɟɬоɜ 253 Convert::ToInt32(width_of_rectangle / 2); Convert::ToInt32(height_of_rectangle / 2); Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɞɜɚжɞы компонɟнɬɚ Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния ). Form1.h шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 254 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 51.3. Мɟɬоɞ компонɟнɬɚ Timer. boundary_of_rectangle_x, boundary_of_rectangle_y, width_of_rectangle, boundary_of_rectangle_y); boundary_of_rectangle_x, boundary_of_rectangle_y, boundary_of_rectangle_x, height_of_rectangle); �myGraphics-DrawLine(gcnew Pen(Color::Red, 3), Convert::ToInt32(position_of_ball_x - Convert::ToInt32(position_of_ball_y - Ƚлɚɜɚ 51. Мɟɬоɞикɚ лɟɬɚющиɯ пɪɟɞмɟɬоɜ 255 width_of_rectangle) Microsoft::VisualBasic::Interaction::Beep(); �if (position_of_ball_y + radius_of_ball_y = { move_of_ball_y = -move_of_ball_y; Microsoft::VisualBasic::Interaction::Beep(); } if (position_of_ball_y - radius_of_ball_y = { Microsoft::VisualBasic::Interaction::Beep(); } ɜызоɜ пɟɪɟɝɪɭжɟнноɝо мɟɬоɞɚ DrawImage, VC++ мноɝо пɟɪɟɝɪɭзки иɫпользоɜɚн ɜиɞ пɟɪɟɝɪɭзки : DrawImage(Image, Integer, Integer, Integer, Integer). мɟɬоɞ оɛъяɫняли пɪɟɞыɞɭщɟй Чɬоɛы ɭɫɬɚноɜиɬь ɫɜойɫɬɜɚ Interval компонɟнɬɚ Timer зɚɜиɫимоɫɬи Value ползɭнкɚ ɭпɪɚɜлɟния TrackBar, ɞɜɚжɞы TrackBar ɪɟжимɟ пɪоɟкɬиɪоɜɚния Пояɜляɟɬɫя Form1.h шɚɛлоном коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɬɚкой ɜиɞ 256 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 51.4. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. ɪɚзɪɚɛоɬɚнной ɜышɟ мɟɬоɞикɟ имɟɬь ɜозможноɫɬь пɪиоɫɬɚно пɪоцɟɫɫ ɪиɫɭнкɟ помощи Stop Animation, ɞɜɚжɞы щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 51.1). Пояɜляɟɬɫя ɮɚйл Form1.h шɚɛлоном коɬоɪый поɫлɟ пɪинимɚɟɬ 51.5. Мɟɬоɞ кнопки Stop Animation. OffOn = true; � timer1-Enabled = true; OffOn = false; Ƚлɚɜɚ 51. Мɟɬоɞикɚ лɟɬɚющиɯ пɪɟɞмɟɬоɜ 257 51.6. Мɟɬоɞ компонɟнɬɚ PrintDocument. �Graphics^ myGraphics = this-CreateGraphics(); boundary_of_rectangle_x, boundary_of_rectangle_y, width_of_rectangle, boundary_of_rectangle_y); boundary_of_rectangle_x, boundary_of_rectangle_y, boundary_of_rectangle_x, height_of_rectangle); Convert::ToInt32(position_of_ball_x - Convert::ToInt32(position_of_ball_y - 52. 52.1. инициɚлизɚция ɝлоɛɚльныɯ пɟɪɟмɟнныɯ щɟлкɚɟм ɮоɪмɟ Form1 ɪɟжимɟ пɪоɟкɬиɪоɜɚния пояɜиɜшийɫя поɫлɟ пɪинимɚɟɬ 52.2. Мɟɬоɞ Form1_Load Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɞɜɚжɞы компонɟнɬɚ Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния ). Form1.h шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 52.3. Мɟɬоɞ компонɟнɬɚ Timer. Ƚлɚɜɚ 52. Мɟɬоɞикɚ ɚнимɚции ɝɪɚɞиɟнɬноɝо зɚполнɟния ɬɟкɫɬɚ 259 � gcnew SizeF(myGraphics-MeasureString( gcnew PointF(Convert::ToSingle( � (width_of_rectangle - SizeF_of_Text-Width) / 2), � (height_of_rectangle - SizeF_of_Text-Height) / 2)); 260 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 PointF(0.0f, 0.0f), Color::Red, BackColor); Step_of_Gradient = -5; Step_of_Gradient = 5; коɞɟ ɝлɚɜным яɜляɟɬɫя пɟɪɟɝɪɭжɟнноɝо DrawString ( Graphics) ɜиɞɚ DrawString(String, Font, Brush, PointF). Чɬоɛы ɫɜойɫɬɜɚ Interval компонɟнɬɚ Timer Value ползɭнкɚ ɭпɪɚɜлɟния TrackBar, ɞɜɚжɞы элɟмɟнɬ ɭпɪɚɜлɟния TrackBar ɪɟжимɟ пɪоɟкɬиɪоɜɚния Form1.h ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 52.4. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. Ƚлɚɜɚ 52. Мɟɬоɞикɚ ɚнимɚции ɝɪɚɞиɟнɬноɝо зɚполнɟния ɬɟкɫɬɚ 261 ɪɚзɪɚɛоɬɚнной ɜышɟ мɟɬоɞикɟ имɟɬь ɜозможноɫɬь пɪиоɫɬɚно пɪоцɟɫɫ ɪиɫɭнкɟ помощи Stop Animation, ɞɜɚжɞы щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 52.1). Пояɜляɟɬɫя ɮɚйл Form1.h шɚɛлоном коɬоɪый поɫлɟ пɪинимɚɟɬ 52.5. Мɟɬоɞ кнопки Stop Animation. OffOn = true; � timer1-Enabled = true; OffOn = false; 52.6. Мɟɬоɞ компонɟнɬɚ PrintDocument. 262 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 � gcnew SizeF(myGraphics-MeasureString( gcnew PointF(Convert::ToSingle( � (width_of_rectangle - SizeF_of_Text-Width) / 2), � (height_of_rectangle - SizeF_of_Text-Height) / 2)); Ƚлɚɜɚ 52. Мɟɬоɞикɚ ɚнимɚции ɝɪɚɞиɟнɬноɝо зɚполнɟния ɬɟкɫɬɚ 263 PointF(0.0f, 0.0f), Color::Red, BackColor); � myGraphics-DrawString(drawText, myFont, 53. 53.1. Мɟɬоɞ компонɟнɬɚ Timer1. 54. 54.1. Шɚɛлон 266 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 Circles[k].pos.X - Circles[k].value, Convert.ToInt32(Circles[k].pos.Y - Cir- ) Circles[k].value * 2, Convert.ToInt32(Circles[k].value / 2)); Circles[k].value = Circles[k].value + 10; Ƚлɚɜɚ 54. Изоɛɪɚжɟниɟ кɪɭɝоɜ ɜоɞɟ иɫпользоɜɚниɟм ɛɭɮɟɪизɚции 267 } 55. 55.1. Animated text on console.cpp пɟɪɟɞ 55.2. Animated text on console.cpp поɫлɟ коɞɚ gcnew System::Timers::Timer(3000); Ƚлɚɜɚ 55. Ⱥнимɚция ɬɟкɫɬɚ конɫольном пɪиложɟнии 269 , " " c + Enter."); } static void OnTimedEvent(Object^ source, ElapsedEventArgs^ e) : Console::WriteLine (" " " Enter:"); } . // , : //Console::WriteLine(L"Hello World"); : // myT, // myMain(): Timer2^ myT = gcnew Timer2; while, c+Enter: while(Console::Read()!='c'); // . IX. 56. 56.1. Мɟɬоɞ ɞля ɮоноɜоɝо изоɛɪɚжɟния � this-BackgroundImage = 56.2. Оɛɪɚɛоɬчик кнопки ɜыɜоɞɚ изоɛɪɚжɟния � this-BackgroundImage = поɫлɟ пɪоɟкɬɚ пɪɟɞыɞɭщɟɟ ɮоноɜоɟ изоɛɪɚжɟниɟ Fig1.jpg ( 56.1) ноɜым изоɛɪɚжɟниɟм Fig5.jpg ( лиɫɬинɝ 56.2), покɚ ɪиɫ . 56.7. Ⱥнɚлоɝично можно ɞɪɭɝой мɟɬоɞ нɚпɪимɟɪ оɛɪɚɛоɬчик люɛомɭ ɭпɪɚɜлɟния Properties ( Form) Events ɞɜɚжɞы ɫоɛыɬия Click. коɬоɪый поɫлɟ пɪинимɚɟɬ ɬɚкой ɜиɞ � this-BackgroundImage = Ƚлɚɜɚ 56. Мɟɬоɞикɚ зɚɞɚния конɜɟɪɬиɪоɜɚния зɚмɟны 56.3. Конɜɟɪɬиɪоɜɚниɟ ɫоɯɪɚнɟниɟ изоɛɪɚжɟния // Image^ myImage = // � myImage-Save("D:\\MyDocs\\Fig2_1.gif", // � this-BackgroundImage = Ⱥнɚлоɝично конɜɟɪɬиɪоɜɚния изоɛɪɚжɟния Fig2_1.gif (.gif), пɪимɟɪ ɮоɪмɚɬ (.png) иɫпользɭɟɬɫя коɞ Image^ myImage = � myImage-Save("D:\\MyDocs\\Fig2_1.png", Ⱥнɚлоɝично конɜɟɪɬиɪɭюɬɫя изоɛɪɚжɟния оɞноɝо ɮоɪмɚɬɚ ɞɪɭɝой пɟɪɟч поɞɞɟɪжиɜɚɟмыɯ ɮоɪмɚɬоɜ ɪиɫ . 56.8. ɮɚйл Form1.h нɟоɛɯоɞимо чɚɫɬь ɋнɚчɚлɚ ɜɜɟɪɯɭ Form1.h нɟоɛɯоɞимоɟ пɪоɫɬɪɚнɫɬɜо мɟɫɬɟ Form1 ( нɚпɪимɟɪ нижɟ ɫɜɟɪнɭɬоɝо коɞɚ оɛъяɜляɟм мɚɫɫиɜ изоɛɪɚжɟний ɝлоɛɚльныɟ пɟɪɟмɟнныɟ 56.4. Мɟɬоɞ Form1_Load зɚɝɪɭзки изоɛɪɚжɟний // myArrayImages[1] = 272 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 myArrayImages[2] = Image::FromFile("D:\\MyDocs\\Fig2.jpg"); myArrayImages[3] = Image::FromFile("D:\\MyDocs\\Fig3.jpg"); myArrayImages[4] = Image::FromFile("D:\\MyDocs\\Fig4.jpg"); myArrayImages[5] = Image::FromFile("D:\\MyDocs\\Fig5.jpg"); myArrayImages[6] = Image::FromFile("D:\\MyDocs\\Fig6.jpg"); myArrayImages[7] = myArrayImages[8] = Ⱥнɚлоɝично пɪиложɟниɟ зɚɝɪɭжɚюɬɫя ɞɪɭɝиɟ мɚɫɫиɜы ɯоɬим иɫполь чɟɪɟɞоɜɚниɟ изоɛɪɚжɟний ɞɪɭɝиɯ Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɬɚймɟɪ ɞɜɚжɞы щɟлкɚɟм знɚчок компонɟнɬɚ Timer ( ɪɟжи пɪоɟкɬиɪоɜɚния Пояɜляɟɬɫя Form1.h шɚɛлоном коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 56.5. Мɟɬоɞ компонɟнɬɚ Timer1. //Оɪɝɚнизоɜыɜɚɟм цикл ɞля ɜоɫьми ɪиɫɭнкоɜ: j = j + k; if (j == 8) { // k = -8; // k = 1; 57. 57.1. пɟɪɟмɟнныɟ щɟлкɚɟм Form1 ɪɟжимɟ пɪоɟкɬиɪоɜɚния Properties, Events, Load) шɚɛлон ɬɚкой 57.2. Мɟɬоɞ Form1_Load зɚɝɪɭзки ɪиɫɭнкоɜ myArrayImages[0] = Image::FromFile("D:\\MyDocs\\" "DeepDrawing_step0.bmp"); myArrayImages[1] = Image::FromFile("D:\\MyDocs\\" Image::FromFile("D:\\MyDocs\\" Image::FromFile("D:\\MyDocs\\" Image::FromFile("D:\\MyDocs\\" Image::FromFile("D:\\MyDocs\\" чɬо мɟɬоɞ Form1_Load ɜыполняɟɬɫя оɞноɜɪɟмɟнно пояɜлɟниɟм ɝɪɭзкой Load) Form1 мониɬоɪɚ Пɪи эɬом ɪиɫɭнки зɚɝɪɭжɚюɬɫя ɪиɫɭнкоɜ myArrayImages[N] зɚɞɚнным количɟɫɬɜом элɟмɟнɬоɜ N. Оɬмɟɬим чɬо полный 274 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 ложɟния ɮɚйлɚ ɮоɪмɚɬɚ (.bmp), ɞиɫкɚ D, ɞɜɭɯ ɫɬɪокɚɯ пɪɚɜилɭ пɟɪɟноɫɚ Ⱥнɚлоɝично пɪиложɟниɟ зɚɝɪɭжɚюɬɫя ɞɪɭɝиɟ ɪиɫɭнки ɞɪɭɝиɟ ɯоɬим чɟɪɟɞоɜɚɬь оɞниɯ ɪиɫɭнкоɜ ɫɟɪия ɞɪɭɝиɯ ɪиɫɭнкоɜ Чɬоɛы поɞключиɬь ɪɚɛоɬɟ ɬɚймɟɪ ɞɜɚжɞы щɟлкɚɟм знɚчок ɞля Timer ( ɪɟжимɟ пɪоɟкɬиɪоɜɚния ). Form1.h шɚɛло ном поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 57.3 Мɟɬоɞ изоɛɪɚжɟний ��myArrayImages[j]-Width, myArrayImages[j]-Height); // k = -5; // k = 1; 57.4. Мɟɬоɞ элɟмɟнɬɚ ɭпɪɚɜлɟния TrackBar. Ƚлɚɜɚ 57. Мɟɬоɞикɚ ɪɚзɪɚɛоɬки мɭльɬипликɚции 275 ɪɚзɪɚɛоɬɚнной ɜышɟ мɟɬоɞикɟ имɟɬь ɜозможноɫɬь пɪиоɫɬɚно пɪоцɟɫɫ ɪиɫɭнкɟ помощи Stop Animation, ɞɜɚжɞы щɟлкɚɟм кнопкɭ ɪɟжимɟ пɪоɟкɬиɪоɜɚния ɪиɫ . 57.8). Пояɜляɟɬɫя Form1.h шɚɛлоном коɬоɪый поɫлɟ 57.5 Оɛɪɚɛоɬчик кнопкɟ Stop Animation. OffOn = true; � timer1-Enabled = true; OffOn = false; 57.6. Мɟɬоɞ компонɟнɬɚ PrintDocument. 276 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 � myArrayImages[j]-Width, � myArrayImages[j]-Height); } Ɍɟпɟɪь ɞɜɚжɞы Print ( ɪиɫ . 57.8). Оɬкɪыɜɚɟɬɫя Form1.h шɚɛлоном коɬоɪый зɚпиɫыɜɚɟм эɬоɝо шɚɛлонɚ пɪиɜɟɞɟнноɝо ɪɚɝɪɚɮɚ Мɟɬоɞикɚ изоɛɪɚжɟния пɪинɬɟɪɟ цɟльноɫɬи изложɟния пɪиɜɟɞɟм эɬоɬ ɞɚнной 57.7. Коɞ пɟчɚɬи изоɛɪɚжɟния 58. 58.1. Мɟɬоɞ компонɟнɬɚ Timer. � pictureBox1-SizeMode = //Оɪɝɚнизоɜыɜɚɟм цикл по инɞɟкɫɭ 'currentImage' : currentImage = currentImage + 1; инɞɟкɫɭинɞɟкɫɭ if (currentImage == imageList1-Images-Count) currentImage = 0; } } Лиɫɬинɝ 58.2. Мɟɬоɞ компонɟнɬɚ PrintDocument. 59. 59.1. Мɟɬоɞ ɜыɜоɞɚ пɪямоɭɝольникоɜ зɚполнɟнныɯ Bitmap^ myBitmap = gcnew Bitmap(150, 150, Ƚлɚɜɚ 59. Мɟɬоɞикɚ ɭпɪɚɜлɟния изоɛɪɚжɟния 59.2. инициɚлизɚция иɫɯоɞныɯ чɬо эɬом 59.2 ɞɜɚ имɟющиɯɫя ɪиɫɭнкɚ зɚɝɪɭжɚюɬɫя myImage1, myImage1 System.Drawing.Image. полный ɪɚɫположɟния ɮɚйлɚ ɮоɪмɚɬɚ (.jpg), нɚчинɚя D. Ⱥнɚлоɝично пɪиложɟниɟ ɞɪɭɝиɟ ɪиɫɭнки ɯоɬим чɟɪɟɞоɜɚɬь цɜɟɬоɜ ɪɚзличныɯ ɪиɫɭнкоɜ щɟлкɚɟм ɮоɪмɟ Form1 ɪɟжимɟ пɪоɟкɬиɪоɜɚния пояɜиɜшийɫя поɫлɟ пɪинимɚɟɬ 59.3. Мɟɬоɞ Form1_Load Form1. for(int j=0; j5; ++j) myArray[i,j] = 0; 280 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 myArray[3,3] = Alpha; //Пɟɪɟɞɚɟм нɚчɚльныɟ знɚчɟния //ɞиɚɝонɚльныɯ элɟмɟнɬоɜ мɚɬɪицы myArray //элɟмɟнɬɚм мɚɬɪицы цɜɟɬɚ myColorMatrix: цɜɟɬɚ myColorMatrix-Matrix00 = myArray[0,0]; цɜɟɬɚ myColorMatrix-Matrix11 = myArray[1,1]; цɜɟɬɚ myColorMatrix-Matrix22 = myArray[2,2]; цɜɟɬɚ myColorMatrix-Matrix33 = myArray[3,3]; цɜɟɬɚ myColorMatrix-Matrix44 = myArray[4,4]; } Чɬоɛы мɭльɬипликɚционноɟ изоɛɪɚжɟниɟ пояɜилоɫь ɭпɪɚɜлɟ PictureBox, Properties ( эɬоɝо элɟмɟнɬɚ PictureBox) Events щɟлкɚɟм Paint пояɜиɜшийɫя нɚш поɫлɟ чɟɝо пɪинимɚɟɬ ɬɚкой 59.4. Коɞ ɭпɪɚɜлɟния PictureBox. Ƚлɚɜɚ 59. Мɟɬоɞикɚ ɭпɪɚɜлɟния изоɛɪɚжɟния 59.5. Мɟɬоɞ компонɟнɬɚ Timer. �Convert::ToSingle(myRandom-NextDouble()); �Convert::ToSingle(myRandom-NextDouble()); �Convert::ToSingle(myRandom-NextDouble()); 59.6. Мɟɬоɞ компонɟнɬɚ PrintDocument. X. 60. Пɪоɞолжɚɟм ɪɚзɪɚɛɚɬыɜɚɬь мɟɬоɞолоɝию инɬɟɝɪɚции ɞɪɭɝими пɪимɟɪɟ инɬɟɝɪɚции очɟнь попɭляɪным шиɪоко пɪимɟняɟмым пɪоиɝɪыɜɚɬɟлɟм Microsoft Windows Media Player. ɪɚзɪɚɛоɬɚɟм пɪимɟнɟния мɟɬоɞоɜ VC++ ɜоɫ пɪоизɜɟɞɟния оɫноɜныɯ ɮɚйлоɜ чɬоɛы эɬой ɫɯɟмɟ ɞополняɬь ɫиɫɬɟмɭ ɞɪɭɝими ɜозможноɫɬями эɬой инɬɟɝɪɚции Чɬоɛы ɜоɫпɪоизɜоɞиɬь ɭкɚзɚнныɟ компьюɬɟɪɟ ɞолжны ɭɫɬɚноɜ ɫооɬɜɟɬɫɬɜɭющиɟ ɬɟɯничɟɫкоɟ ( пɪоɝɪɚммноɟ ɬɟɯничɟɫким понимɚɟɬɫя зɜɭкоɜɚя кɚчɟɫɬɜɟ пɪоɝɪɚммноɝо оɛɟɫпɟчɟния ɞɚнной книɝɟ ɪɚɫɫмоɬɪим нɚиɛолɟɟ имɟнно , Microsoft Windows Media Player ɫлɟɞɭющиɯ ɜɟɪɫий Windows Media Player 6.4 for Win95 and Win NT4 Windows Media 7.1 for Win98, Win2000 and Win Me Windows Media 8 Series for Win98 SE, ME and 2000 Windows Media 8 Series for Windows XP Windows Media Player 9 Series for Win98 SE, ME and 2000 Windows Media Player 9 Series for Windows XP ɜɟɪɫии ɪɭɫиɮициɪоɜɚннɭю Windows Media Player 10 можно ɛɟɫплɚɬно зɚɝɪɭзиɬь ɚнɝлийɫкоɝо ɪɭɫɫкоɝо microsoft.com. Нɚпомним чɬо пɪоиɝɪыɜɚɬɟль Windows Media иɫпользɭɟɬɫя чɬоɛы пɪоɫмɚɬɪиɜɚɬь опɟɪɚɬиɜныɟ ноɜоɫɬи ɜиɞɟо Web- поɫɟщɚɬь концɟɪɬ ɜоɫпɪоиз киноɮильмɚ Windows Media Player поняɬиɟ зɜɭкоɜой ɛɟнноɫɬи Windows Media Player нɚиɛолɟɟ ɜɫɟɫɬоɪонним пɪоɫɬым эɮɮɟк ɜоɫпɪоизɜɟɞɟниɟ шиɪокоɝо ɞиɚпɚзонɚ ɬипоɜ пɪиɫпоɫоɛлɟниɟ чɬоɛы полниɬь пожɟлɚния пɪɟɞпочɬɟния шиɪокиɟ ɪɚзнооɛɪɚзныɟ ɜозможноɫɬи ɪɚɛоɬы ɞоɫɬɭп ɫоɞɟɪжɚнию ɜышɟ коɪпоɪɚции Microsoft можно поɫлɟɞняя Windows Media Player 10 пɟɪɜый пɪоиɝɪыɜɚɬɟль ɮɭнкциɟй ɜиɞɟо ɚɜɬомɚɬɚ можно мноɝоɟ ɞɪɭɝоɟ 61. 61.1. Мɟɬоɞ оɬкɪыɬия Windows Media. ɮɚйл Form3.h нɟоɛɯоɞимо чɚɫɬь оɬкɪыɬия пɪо иɝɪыɜɚɬɟля Windows Media поɫлɟɞɭющим ɜоɫпɪоизɜɟɞɟниɟм конкɪɟɬноɝо ɚɭɞио пɪи ɜɬоɪой оɫноɜной кнопки Start the audio file ɞɚнной Form3 ɪиɫ Ⱦɜɚжɞы щɟлкɚɟм ɪɟжимɟ ɪɟɞɚкɬиɪоɜɚния Пояɜляɟɬɫя Form3.h шɚɛлоном коɬоɪый поɫлɟ зɚпиɫи коɞɚ пɪинимɚɟɬ ɬɚкой 61.2. Мɟɬоɞ ɜоɫпɪоизɜɟɞɟния чɬо пɪи помощи эɬоɝо ɯоɬим ɜоɫпɪоизɜɟɫɬи ɛиɛлиоɬɟчный жɟɫɬкоɝо компьюɬɟɪɚ ɯоɬим ɜоɫпɪоизɜɟɫɬи мɭзыкɚльный нɚпɪимɟɪ Track03.cda ɭɫɬɚноɜлɟнноɝо F, шɚɛлон лиɫɬинɝɟ 61.2 ɞолжны зɚпиɫɚɬь 62. 62.1. Мɟɬоɞ ɜоɫпɪоизɜɟɞɟния ɜиɞɟо чɬо пɪоиɝɪыɜɚɬɟля 6 62.1 XI. Visual C++ Microsoft Windows Explorer, NotePad, WordPad, Calculator, PowerPoint, Front- 286 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 чɬо пɟɪɟɞ пɪоɝɪɚммы Form1.h поɞключɚɟм пɪоɫɬɪɚнɫɬɜо имɟн Diagnostics пɪи помощи ɮɚйл Form1.h нɟоɛɯоɞимо оɬкɪыɬия Notepad пɪи помощи ɪиɫ . 63.5). Ⱦɜɚжɞы ɪɟɞɚкɬиɪоɜɚния Пояɜляɟɬɫя Form1.h шɚɛлоном мɟɬоɞɚ коɬоɪый поɫлɟ коɞɚ пɪинимɚɟɬ ɫлɟɞɭющий 63.2. Мɟɬоɞ оɬкɪыɬия ɛлокноɬɚ Notepad. Process::Start("Notepad.exe"); // ɪɟжимɟ ɜыполнɟния (Build, Build Solution; Debug, Start Without Debugging) кнопки экɪɚнɟ мониɬоɪɚ пояɜляɟɬɫя ɛлокноɬ NotePad. Ⱥнɚлоɝично оɬкɪыɬия ɪɟɞɚкɬоɪɚ WordPad ɞɚнный пɪоɟкɬ ɜɜоɞим ноɜɭю ɫозɞɚɟм пɪоɟкɬ кнопкой мɟɬоɞɚ оɛɪɚɛоɬки кнопки коɞ Ⱥнɚлоɝично оɬкɪыɬия Microsoft Calculator пɪоɟкɬ ɜɜоɞим ноɜɭю пɪоɟкɬ шɚɛлон мɟɬоɞɚ оɛɪɚɛоɬки щɟлчкɚ эɬой коɞ Ⱥнɚлоɝично оɬкɪыɬия пɪоɝɪɚммы пɪɟзɟнɬɚций PowerPoint ( Microsoft Office System) пɪоɟкɬ ɜɜоɞим ноɜɭю ноɜый пɪоɟкɬ кнопкой шɚɛлон мɟɬоɞɚ оɛɪɚɛоɬки щɟлчкɚ эɬой Ⱥнɚлоɝично оɬкɪыɬия шиɪоко пɪимɟняɟмой пɪоɝɪɚммы плɚɬɮоɪмы ɞля ɪɚзɪɚɛоɬки FrontPage ( Microsoft Office System) пɪоɟкɬ ɜɜоɞим ноɜɭю пɪоɟкɬ шɚɛлон мɟɬоɞɚ оɛɪɚɛоɬки щɟлчкɚ эɬой помощи FrontPage можɟм пɪоɟкɬиɪоɜɚɬь оɬкɪыɬь ɜнɟɫɬи нɚпɪимɟɪ пɪиложɟния Visual C++) пɪи помощи File, Publish Web оɬпɪɚɜиɬь ɫɟɪɜɟɪ пɪоɜɚйɞɟɪɚ пɪɟɞоɫ нɚм ɯоɫɬинɝɚ ноɜый ɜɚɪиɚнɬ пɪɟɞы Инɬɟɪнɟɬɟ оɞноɜɪɟмɟнно оɬкɪыɬь эɬи плɚɬɮоɪмы пɪи помощи оɞной шɚɛлон мɟɬоɞɚ ɞля оɛɪɚɛоɬки кнопки Ƚлɚɜɚ 63. Зɚпɭɫк WE, NotePad, WordPad, Calculator, PowerPoint FrontPage чɬо ɫкоɛкɚɯ ɪɚɫшиɪɟниɟ иɫполняɟмоɝо ɮɚйлɚ ɫɬɪочными пɪопиɫными эɬой пɪи помощи Process Start) можɟм оɬкɪыɜɚɬь пɪоɝɪɚммы ɞополняɬь ɞɪɭɝими можноɫɬями ɬɚкой инɬɟɝɪɚции 64. Visual C++ Ƚлɚɜɚ 64. Visual C++ ɛɪɚɭзɟɪом 64.3. Мɟɬоɞ оɬкɪыɬия 65. 66. 66.1. Ⱥɜɬомɚɬичɟɫки WebService1Class() { InitializeComponent(); // //TODO: Add the constructor code here // } void Dispose(Boolean disposing) { if (disposing && components) { � components-Dispose(); } __super::Dispose(disposing); } 292 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 &#x/sum;&#xmary; /// /summary System::ComponentModel::Container ^components; &#xsumm; ry0; /// summary XII. 67.1 экзɟмпляɪɚ нɚɛоɪɚ 68. Visual Studio 2005 ɫɭщɟɫɬɜɭɟɬ нɟɫколько ɜɚɪиɚнɬоɜ ɪɚзɪɚɛоɬки иɫпользоɜɚниɟм шɚɛлоноɜ пɟɪɜоɝо пɪимɟɪɚ ɪɚɫɫмоɬɪим SQL Server Class Library, оɫноɜɚнный иɫпользоɜɚнии ɛиɛлиоɬɟки ɫпɟци VS щɟлкɚɟм New Project ( File, New, Project), New Project ( ɪиɫ . 68.1) окнɟ Project Types Visual C++, окнɟ Templates шɚɛлон SQL Server Class Library, окнɟ Name пɪоɟкɬɚ SQLServerClassLibrary1, Location ɭмолчɚнию пɚпкɟ коɬоɪой ɪɚɫположɟн пɪоɟкɬ OK. XIII. Visual C++ 69. пɟɪɟɞ зɚɞɚчɚ ɪɚзɪɚɛоɬɚɬь мɟɬоɞолоɝию ɫозɞɚния ɪɚзличныɯ пɪиложɟний Visual C++ иɫпользо элɟмɟнɬоɜ компьюɬɟɪной ɝɪɚɮики пɪɟɞыɞɭщиɯ ɪɚзɪɚɛɚɬыɜɚли пɪиложɟния мɚɬɟмɚɬичɟɫкиɯ ɜычиɫлɟний поɫɬɪоɟния ɝɪɚɮикоɜ ɪɚзɪɚɛɚɬыɜɚɬь пɪиложɟния ɪɟшɟния пɪɚкɬичɟ пɪоɛлɟм нɚпɪимɟɪ пɪомышлɟнноɫɬи ɫɬɪоиɬɟльɫɬɜɟ ɫɟль ɯозяйɫɬɜɟ .). Оɞной ɫɚмыɯ ɪɚɫпɪоɫɬɪɚнɟнныɯ пɪоɛлɟм яɜляɟɬɫя опɪɟɞɟлɟниɟ площɚɞи поɜɟɪɯноɫɬи оɛъɟмɚ люɛоɝо изɞɟлия пɪоɞɭкɬɚ коɬоɪоɟ изɝоɬɚɜлиɜɚɟɬɫя плɚниɪɭɟɬɫя изɝоɬɚɜлиɜɚɬь ɜыпɭɫ Ɋɚɫчɟɬ площɚɞи поɜɟɪɯноɫɬи оɛъɟмɚ нɟоɛɯоɞимо ɜыполняɬь ɚɛɫо ɜɫɟɯ ɫпɪоɟкɬиɪоɜɚнныɯ ɫɭщɟɫɬɜɭющиɯ нɚпɪимɟɪ моɞɟɪнизиɪоɜɚнныɯ ɪɚɫчɟɬ яɜляɟɬɫя ɫɚмоɫɬояɬɟльной чɚɫɬо ɫложной инжɟнɟɪной коɬоɪɚя оɛычно ɪɟшɚɟɬɫя пɪиɛлижɟнно ɞɚнной ɬочноɫɬью ɪɟшɟния иɫпользоɜɚɬь оɪиɟнɬиɪоɜɚннɭю ɮилоɫоɮию коɬоɪɚя оɬмɟчɚлоɫь ɜключɚɟɬ оɫноɜныɯ поняɬия оɛъɟкɬно оɪиɟнɬиɪоɜɚнный оɛъɟкɬно оɪиɟнɬиɪоɜɚнноɟ пɪоɟкɬиɪо оɛъɟкɬно оɪиɟнɬиɪоɜɚнноɟ пɪоɝɪɚммиɪоɜɚниɟ ООП (Object Oriented Programming, OOP). ɪɟɚлизɚции пɪинципоɜ оɪиɟнɬиɪоɜɚнной ɫнɚчɚлɚ нɟоɛɯоɞимо ɪɚзɪɚɛоɬɚɬь оɛъɟкɬоɜ пɟɪɟɞ ɫɬоиɬ зɚɞɚчɚ ɪɚзɪɚɛоɬɚɬь мɟɬоɞикɭ ɪɚɫчɟɬɚ ɞɚнноɝо чɟɪɬɟжɭ Поэɬомɭ ɫɬɚноɜиɬɫя ɫлɟɞɭю ɬɟɯнолоɝичɟɫким пɪизнɚком пɪизнɚк ɝɟомɟɬɪичɟɫкɚя клɚɫɫиɮикɚций мɟɬɪичɟɫкой пɪимɟɪɚ ɜыɛɪɚннɭю ɬɟɯнолоɝичɟɫкомɭ пɪизнɚ номɟнклɚɬɭɪɭ ɪɚзɞɟлим ɝɟомɟɬɪичɟɫкой оɛъɟкɬоɜ оɛъɟкɬоɜ оɛъɟкɬоɜ оɛъɟкɬоɜ 70. 70.1. Пɪоɟкɬ Part3. Part3.cpp. Ƚлɚɜɚ 70. Конɫольноɟ пɪиложɟниɟ ɪɚɫчɟɬɚ мɚɫɫы 297 H = Convert::ToDouble(Console::ReadLine()); A = Area(); //mm*mm V = Volume(); //mm*mm*mm . // : Console::Write("Part area, mm*mm, A ="); Console::WriteLine(A); : Console::Write("Part volume, mm*mm*mm, V ="); // : Console::Write("Part mass for steel,kg, m ="); 298 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 . 71. 71.1. Мɟɬоɞы пɚɪɚмɟɬɪоɜ ɞɟɬɚли 300 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 A = Area(); //mm*mm Ƚлɚɜɚ 71. ȼычиɫлɟниɟ мɚɫɫы пɪи ɮоɪмы // � pictureBox1-BackColor = Color::Yellow; // 71.4. Коɞ пɟчɚɬи инɮоɪмɚции msg = "d = "; �� e-Graphics-DrawString(msg, �this-Font, �msg = textBox1-Text; �� e-Graphics-DrawString(msg, �this-Font, msg = "H = "; �msg = textBox2-Text; �msg = textBox3-Text; 302 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 �msg = textBox4-Text; �msg = textBox5-Text; �msg = textBox6-Text; �msg = textBox7-Text; �msg = textBox8-Text; �msg = textBox9-Text; XIV. Visual C++ 72. ), коɬоɪыɟ окɪɭжɚюɬ изɝоɬоɜлɟны иɫɯоɞноɝо мɚɬɟɪиɚлɚ Поэɬомɭ чɬоɛы ɪɟшɚɬь пɪɚкɬичɟɫкиɟ пɪоизɜоɞɫɬɜɭ нɟоɛɯоɞимо ɮоɪмɚцию или ɜɟщɟɫɬɜɚ или изɝоɬоɜлɟн ɬоɬ иɫɯоɞный мɚɬɟɪиɚл коɬоɪоɝо плɚниɪɭɟм пɪоизɜоɞиɬь ɫнɚчɚлɚ зɚɝоɬоɜки зɚɝоɬоɜок изɞɟлия ɫɜойɫɬɜ имɟɟɬ мɚɬɟɪиɚл пɪимɟɪɚ ɭкɪɭпнɟно лиɫɬоɜой пɪокɚɬ коɬоɪоɝо изɝоɬɚɜлиɜɚюɬ оɫноɜнɭю нɚпɪимɟɪ пɪомышлɟнноɫɬи лиɫɬоɜой пɪокɚɬ ɛольшиɟ ɝɪɭппы покɪыɬиɟм плɚкиɪоɜɚннɚя ɞɪɭɝими мɚɬɟɪиɚлɚми ɛимɟɬɚлл ). покɪыɬия ɝɪɭпп низкоɭɝлɟɪоɞиɫɬɚя ɭɝлɟɪоɞиɫɬɚя низколɟɝиɪоɜɚннɚя лɟɝиɪоɜɚннɚя коɪɪозионно ɫɬойкɚя жɚɪоɫɬойкɚя жɚɪопɪоч ɞɜɭɯɮɚзнɚя пɪочиɟ ɫɬɚли ɝɪɭпп покɪыɬия покɪыɬиɟм покɪыɬиɟм пɪимɟɪɚ ɝɪɭпп мɚɬɟɪиɚлɚ покɪыɬия покɪыɬɚя олоɜом ɫɬɚль покɪыɬɚя цинком покɪыɬɚя ɫɜинцом покɪыɬɚя пɪочим мɟɬɚллом покɪыɬɚя пɪокɚɬ ɛолɟɟ ɛимɟɬɚлл оɫноɜным ɫлоɟм плɚкиɪɭющɟɝо ɞɪɭɝоɝо мɚɬɟɪиɚлɚ пɪимɟɪɚ ɫлɟɞɭющиɟ ɝɪɭпп плɚкиɪоɜɚннɚя ɫплɚɜɚми плɚкиɪоɜɚннɚя мɟɞью ɭɝлɟɪоɞиɫɬɚя низколɟɝиɪоɜɚннɚя плɚкиɪоɜɚннɚя коɪɪозионно ɫɬойкой плɚкиɪоɜɚннɚя пɪочим ɫɬɚль плɚкиɪоɜɚннɚя нɟмɟɬɚллом пɪимɟнɟния эɬиɯ ɝɪɭпп очɟнь ɪɚзнооɛɪɚзнɚ опиɫɚнɚ ɫпɟциɚльной лиɬɟɪɚɬɭɪɟ можɟм опиɫыɜɚɬь зɞɟɫь мноɝооɛɪɚзиɟ пɪокɚɬɚ Поэɬомɭ пɪимɟɪɚ ɞɟлим ɭɫлоɜно лиɫɬоɜой пɪокɚɬ ɫплɚɜоɜ 18 ɛольшиɯ ɝɪɭпп мɟɞь ; 3) ; 4) ; 5) ɬиɬɚн ɫплɚɜы ; 6) ; 7) молиɛɞɟн ; 8) ниоɛий ; 9) ɬɚнɬɚл ɫплɚɜы ; 10) циɪконий ɟɝо ɫплɚɜы 11) ɜольɮɪɚм ; 12) ɪɟний ; 13) ; 14) ɟɝо ; 15) ; 16) ɫɟɪɟɛɪо ɫплɚɜы ; 17) ɟɝо ; 18) 73. ɮоɪмɭ ɪɚзмɟɪы зɚɝоɬоɜки опиɫɚнной ɪɚнɟɟ мɟɬоɞикɟ нɚпɪимɟɪ пɪиɛлижɟнии пɪиɫɬɭпɚɟм мɚɬɟмɚɬичɟɫкомɭ оɛɪɚɛоɬки зɚɝоɬоɜки оɬмɟчɚли ɫɭщɟɫɬɜɭɟɬ мноɝо ɫпоɫоɛоɜ оɛɪɚɛоɬки зɚɝо Ɍɟоɪɟɬичɟɫкоɟ мɚɬɟмɚɬичɟɫкоɟ моɞɟлиɪоɜɚниɟ пɪɚк ɬɟɯнолоɝичɟɫкиɯ пɚɪɚмɟɬɪоɜ оɛɪɚɛоɬки зɚɝоɬоɜки мноɝими ɫпоɫоɛɚми кɚк пɪɚɜило оɫноɜɚны пɪимɟнɟнии ɭпɪɭɝоɫɬи плɚ ɫɬичноɫɬи Ⱦɚжɟ оɛɪɚɛоɬкɚ ɪɟзɚниɟм пɪи помощи ɬɟоɪии ɫɬичноɫɬи экɫпɟɪимɟнɬы ɬɚким ɫпоɫоɛɚм пɪокɚɬкɚ шɬɚмпоɜкɚ пɪоɜоɞяɬɫя ɬолько ɬɟоɪий ɭпɪɭɝоɫɬи ɫɬичноɫɬи коɬоɪыɟ ɬɚкжɟ пɪимɟняɬь ɞɚнной ɬɟоɪɟɬичɟɫкоɝо иɫɫлɟɞоɜɚния мɚɬɟмɚɬичɟɫкоɝо моɞɟлиɪоɜɚния оɛɪɚɛоɬки нɟоɛɯоɞимо пɪиняɬь опɪɟɞɟлɟнныɟ ɞопɭщɟния мɚɬɟмɚ ɪɚɫчɟɬнɭю моɞɟль зɚɝоɬоɜки оɞной ɫɬоɪоны ɞолжнɚ мɟɪɟ ɫооɬɜɟɬɫɬɜоɜɚɬь ɪɟɚльным ɭɫлоɜиям оɛɪɚɛоɬки пɪоизɜоɞɫɬɜɟ ɞɪɭɝой ɫɬоɪоны позɜолиɬь ɪɚɫɫчиɬɚɬь ɞоɫɬɚ ɬочноɫɬью пɪɚкɬичɟɫки пɚɪɚмɟɬɪы ɪɚɛоɬы компьюɬɟɪɚ ɜыɛɪɚнной ɪɚɫчɟɬной моɞɟли нɟоɛɯоɞимо ɞɟɮоɪмɚции нɚпɪяжɟния коɬоɪыɟ зɚɝоɬоɜкɟ пɪи оɛɪɚɛоɬкɟ ɬолько поɫлɟ эɬоɝо можно ɪɚɫɫчиɬɚɬь пɪɚкɬичɟɫки пɚɪɚмɟɬɪы ɬɟɯнолоɝичɟɫкоɝо оɛɪɚ зɚɝоɬоɜки нɚпɪимɟɪ ɜозɞɟйɫɬɜия инɫɬɪɭмɟнɬɚ зɚɝоɬоɜкɭ инɬɟɝɪɚльной ɯɚɪɚкɬɟɪиɫɬикой нɚпɪяжɟний ɜозникɚющиɯ зонɟ инɫɬɪɭмɟнɬɚ зɚɝоɬоɜки конкɪɟɬноɝо пɪимɟɪɚ ɪɚɫɫмɚɬɪиɜɚɟм оɛɪɚɛоɬкɭ ɬонкой плоɫкой изɝоɬоɜлɟнноɝо нɚпɪимɟɪ ɪɟзкой пɪокɚɬɚ шɬɚмпɟ лɚзɟɪной ɭɫɬɚноɜкɟ ɪɚзмɟɪɚми ɪиɫ . 73.1): нɚɪɭжный кольцɚ D ( ɪɚɞиɭɫ R); иноɝɞɚ пɪимɟняɬь оɛознɚчɟниɟ ноɝо ɞиɚмɟɬɪɚ ɪɚɞиɭɫ ɜнɭɬɪɟнний ɬолщинɚ кольцɚ Оɛɪɚɛоɬкɚ зɚɝоɬоɜки зɚключɚɟɬɫя ɬом ɜнɭɬɪɟнняя поɜɟɪɯноɫɬь ɪɚɜномɟɪно пɟɪɟмɟщɚɟɬɫя ɪиɫ 73.1). Ɍɚкɚя оɛɪɚɛоɬкɚ оɫɭщɟɫɬɜляɬьɫя пɪомышлɟнноɫɬи нɚпɪимɟɪ ɭпɪочнɟния нɚɝɚɪɬоɜки мɚɬɟɪиɚлɚ ɜнɭɬɪɟннɟм конɬɭɪɟ ɞля поɜышɟния пɪочноɫɬныɯ ɯɚɪɚкɬɟɪиɫɬик оɛжимɚ ɞɪɭɝой коɬоɪɚя ɜɫɬɚɜляɟɬɫя оɛщɟм оɛɪɚɛоɬки зɚɝоɬоɜки ɝɪɚничныɯ ɭɫлоɜияɯ пɪи мɚɬɟмɚɬичɟɫкой зɚɞɚчи 74. иɫɫлɟɞоɜɚнии оɛɪɚɛоɬки ɪɟшɟния помощью ɬɟо ɪий ɭпɪɭɝоɫɬи моɝɭɬ ɛыɬь полɭчɟны нɟɛольшоɝо чиɫлɚ пɪоɫɬыɯ зɚɞɚч пɪимɟɪы пɪиɜɟɞɟны Пɪи ɪɟшɟнии зɚɞɚч нɚпɪимɟɪ ɭпɪɭɝо плɚɫɬичɟɫкиɯ ɭчɟɬом ɚнизоɬɪопии нɟоɞ ноɪоɞноɫɬи зɚɝоɬоɜки пɪимɟняюɬ оɫноɜном мɟɬоɞ элɟмɟнɬоɜ МКЭ (finite element method - FEM), коɬоɪый шɚɝи иɫɯоɞныɯ ɪɚзмɟɪоɜ мɟɯɚничɟɫкиɯ элɟмɟнɬы ɪɚɫчɟɬ кооɪɞинɚɬ ɭзлоɜ коɬоɪыɯ нɟоɛɯоɞимо опɪɟɞɟлиɬь пɟɪɟмɟщɟния Опɪɟɞɟлɟниɟ зɚɜиɫимоɫɬɟй пɟɪɟмɟщɟниями мɚɬɪиц ɜɟкɬоɪɚ конɟчноɝо элɟмɟнɬɚ ɋоɫɬɚɜлɟниɟ полной ɚлɝɟɛɪɚичɟɫкиɯ ɭɪɚɜнɟний ɪɚɜноɜɟ ɫɛоɪкɚ оɞной ɝлоɛɚльной мɚɬɪицы ɝлоɛɚльноɝо ɜɟкɬоɪɚ лоɜыɯ конɟчныɯ элɟмɟнɬоɜ ɭɪɚɜнɟний ɝɪɚничныɯ ɭɫлоɜий полɭчɟнной ɭɪɚɜнɟний Опɪɟɞɟлɟниɟ компонɟнɬоɜ нɚпɪяжɟнно ɞɟɮоɪмиɪоɜɚнноɝо ɫоɫɬояния пɪɚкɬичɟɫки пɚɪɚмɟɬɪоɜ ɬɟɯнолоɝичɟɫкоɝо пɪоцɟɫɫɚ оɛɪɚɛоɬки 75. пɪɟɞыɞɭщиɯ ɪɚзɪɚɛоɬɚли мɟɬоɞы коɞиɪоɜɚния ɝɟомɟɬɪии зɚɞɚнноɝо ɞɟɬɚли ɪɚɫчɟɬɚ ɪɚзмɟɪоɜ зɚɝоɬоɜки мɟɯɚничɟɫкиɯ зɚɝоɬоɜки мɚɬɟмɚɬичɟɫкоɝо моɞɟлиɪоɜɚния оɛɪɚɛоɬки зɚɝоɬоɜки ɬоɪой плɚниɪɭɟм пɪоизɜоɞиɬь изɞɟлиɟ ɛɚзɟ инɮоɪмɚ можɟм пɪиɫɬɭпиɬь ɫозɞɚнию пɪиложɟния ɜычиɫлиɬɟльной ɫиɫɬɟмы мɚɬɟмɚɬичɟɫкоɝо моɞɟлиɪоɜɚния пɪоɜɟɞɟния ɜычиɫлиɬɟльноɝо экɫпɟɪимɟн иɫпользоɜɚниɟм компьюɬɟɪной ɝɪɚɮики ɫложноɝо ɬɟɯнолоɝичɟɫкоɝо пɪоцɟɫɫɚ изɝоɬоɜлɟния оɞной ɬипичныɯ ɞɟɬɚлɟй пɪоизɜоɞɫɬɜɟ кɚчɟɫɬɜɟ ɬɚкиɯ ɪɚɫпɪоɫɬɪɚнɟнныɯ ɛыɬɭ ɬɟɯникɟ ɞɟɬɚли коɬоɪыɟ изɝоɬɚɜлиɜɚюɬɫя оɞним оɫноɜныɯ ɫпоɫоɛоɜ лиɫɬоɜой шɬɚмпоɜки ɜыɬяжкой инɫɬɪɭмɟнɬɚльном шɬɚмпɟ Поэɬомɭ пɪимɟɪɟ опишɟм моɞɟлиɪоɜɚния изɝоɬоɜлɟния Пɪоɟкɬиɪоɜɚниɟ ɬɟɯнолоɝичɟɫкиɯ пɪоцɟɫɫоɜ пɟɪɜой опɟɪɚций шɬɚмпɚɯ оɫɟɫиммɟɬɪичныɯ коɪоɛчɚɬыɯ плоɫкой пɪоɫɬɪɚнɫɬɜɟнной лиɫɬоɜой зɚɝоɬоɜки оɫноɜныɟ ɫɬɚɞии иɫɯоɞныɯ опɪɟɞɟлɟниɟ конɮиɝɭɪɚции ɪɚзмɟɪоɜ плоɫкой ɬɟоɪɟɬичɟɫкоɟ иɫɫлɟɞоɜɚниɟ ɜозможноɫɬи чɟɪɬɟжɭ плоɫкой оɞнɭ ɪɭшɟния ɬɟоɪɟɬичɟɫкоɟ иɫɫлɟɞоɜɚниɟ количɟɫɬɜɚ ɪɚзмɟɪоɜ полɭɮɚɛɪикɚɬоɜ опɟɪɚции оɞнɭ нɟɜозможнɚ опɪɟɞɟлɟниɟ ɪɚɛоɬы ɞɟɮоɪмиɪоɜɚния опɟɪɚ ɜыɛоɪɚ пɪɟɫɫоɜоɝо оɛоɪɭɞоɜɚния пɪоɟкɬиɪоɜɚния шɬɚмпоɜ ȼɜоɞ ɜычиɫлиɬɟльнɭю ɪɚɫчɟɬ иɫɯоɞныɯ пɪоɟкɬиɪоɜɚния ɬɟɯнолоɝичɟɫкоɝо пɪоцɟɫɫɚ оɫɭщɟɫɬɜляɟɬɫя пɪи помощи чɟɪɬɟжɚ мониɬоɪɟ компьюɬɟɪɚ Ɍолщинɚ зɚɝоɬоɜки пɪинимɚɟɬɫя ɪɚɜной ɬолщинɟ ɞɟɬɚли ɫооɬɜɟɬɫɬɜɭɟɬ ɜнɭɬɪɟннɟй полоɫɬи ɝоɬоɜой полɭɮɚɛɪикɚ поɫлɟɞɭющиɯ опɟɪɚций ɪɚɞиɭɫ ɫкɪɭɝлɟнной кɪомки ɪɚɞиɭɫɭ полɭɮɚɛɪикɚɬɚ ɪɚɞиɭɫ ɫкɪɭɝлɟнной кɪомки мɚɬɪицы ɪɚɜɟн ɪɚɞиɭɫɭ ɮлɚнцɚ или ɪɚɞиɭɫɭ ɪɚɫɫчиɬɚнномɭ ɫпɪɚɜочной лиɬɟɪɚɬɭɪɟ лиɫɬоɜой шɬɚмпоɜки 76. Пɪоɞолжɚɟм ɪɚзɪɚɛɚɬыɜɚɬь мɟɬоɞолоɝию ɫиɫɬɟмы компьюɬɟɪноɝо ɟкɬиɪоɜɚния CAD/CAM system) ɬɟɯнолоɝичɟɫкиɯ пɪоцɟɫɫоɜ ɬоɜлɟния ɬипичныɯ ɞɟɬɚлɟй пɪомышлɟнноɫɬи нɚпɪимɟɪ пɪи пɪоизɜоɞɫɬɜɟ ɞɟɬɚлɟй лиɫɬоɜоɝо оɫноɜɟ плɚɬɮоɪмы ɜизɭɚльноɝо пɪоɝɪɚммиɪоɜɚния коɬо компьюɬɟɪной ɝɪɚɮики пɪɟɞыɞɭщиɯ ɪɚзɪɚɛоɬɚли пɪоɟкɬиɪоɜɚния пɪоцɟɫɫоɜ оɛɪɚɛоɬки зɚɝоɬоɜок пɪимɟɪɟ ɜыɬяжки ɬоɜой зɚɝоɬоɜки Пɪоɟкɬиɪоɜɚниɟ пɪоцɟɫɫɚ пɪи помощи мɚɬɟмɚɬичɟɫкоɝо моɞɟлиɪоɜɚния оɛɪɚɛоɬки изоɬɪопной зɚɝоɬоɜки оɫноɜɟ ɚнɚлиɬичɟɫкоɝо чиɫлɟн ноɝо ɪɟшɟния оɫноɜныɯ ɭɪɚɜнɟний моɞɟлиɪɭющиɯ пɪоцɟɫɫ оɛɪɚɛоɬки ɬɪопный мɚɬɟɪиɚл пɪимɟняɟɬɫя ɪɟɞко Ȼольшинɫɬɜо мɚɬɟɪиɚлоɜ мɟɬɚллоɜ нɟмɟɬɚллоɜ оɛлɚɞɚɟɬ ɚнизоɬɪопиɟй ɪɚзличиɟм мɟɯɚничɟɫкиɯ ɞɪɭɝиɯ нɚиɛолɟɟ ɪɚɫпɪоɫɬɪɚнɟнныɯ ɯолоɞнокɚɬɚныɯ мɚɬɟɪиɚлоɜ ɚнизоɬɪопия ɪɚзличиɟм мɟɯɚничɟ ɪɚзличныɯ нɚпɪɚɜлɟнияɯ плоɫкоɫɬи пɪокɚɬки ɬолщинɟ лиɫɬɚ ɬɟɯнолоɝии пɪокɚɬки оɬжиɝɚ Ⱥнизоɬɪопия ɫɬɚллоɝɪɚɮичɟɫкɭю пɪиɪоɞɭ коɬоɪɚя лиɬɟɪɚɬɭɪɟ ɞɚнной ɪɚзɪɚɛоɬɚɟм пɪоɟкɬиɪоɜɚния пɪоцɟɫɫоɜ ɚнизоɬɪопии иɫɯоɞноɝо мɚɬɟɪиɚлɚ пɪимɟɪɟ ɜыɬяжки конɮиɝɭɪɚции ɜыɪɟзɚнɚ ɜышɟ пɪоɟкɬиɪоɜɚниɟ ɜыполним пɪи помощи мɚɬɟмɚɬичɟɫкоɝо оɫноɜɟ мɟɬоɞɚ конɟчныɯ элɟмɟнɬоɜ 77. ɞɚнной ɪɚзɪɚɛоɬɚɟм мɟɬоɞолоɝию пɪоɟкɬиɪоɜɚния пɪи помощи мɚɬɟмɚ моɞɟлиɪоɜɚния оɞноопɟɪɚционной мноɝоопɟɪɚционной шɬɚмпоɜки ɞɟɬɚлɟй ɪɚзличной ɝɟомɟɬɪии лиɫɬоɜыɯ мɚɬɟɪиɚлоɜ мɟɬɚл ). Нɚпомним ɞɟɬɚли коɪоɛчɚɬой шиɪоко пɪимɟняюɬɫя мɟɬɚлличɟɫкɚя поɫɭɞɚ конɫɟɪɜныɟ кɭɯонныɟ мɚшинɚɯ ɪɚзнооɛɪɚзныɟ кɭзоɜныɟ .). Чɬоɛы ɫпɪоɟкɬиɪоɜɚɬь пɪоцɟɫɫ зɚɞɚɬь пɟɪɜой [1] иɫɯоɞныɯ Ɋɚзмɟɪы коɪоɛки AxBxRxH (A шиɪинɚ , R ɪɚɞиɭɫ ɭɝлоɜоɝо зɚкɪɭɝлɟния нɚɪɭжной поɜɟɪɯноɫɬи , H ɜыɫоɬɚ ). 2. помощи зɚɞɚɟм оɛɪɟзкɭ нɟɪоɜноɝо кɪɚя коɪоɛки поɫлɟ ɜыɬяжки оɛɪɟз пɪоɝɪɚммɚ ɪɚɫɫчиɬыɜɚɟɬ полɭɮɚɛɪикɚɬɚ поɫлɟ оɛɪɟзки ɭчɟɬом ɬɟɯнолоɝичɟɫкоɝо пɪипɭɫкɚ dH: Ha=H+dH. 3. Ɋɚзмɟɪы коɬоɪоɝо изɝоɬɚɜлиɜɚɬьɫя коɪоɛкɚ мɟɯɚничɟɫкиɯ поɫлɟ ɞɚɪɬноɝо иɫпыɬɚния ɪɚɫɬяжɟниɟ коэɮɮициɟнɬ попɟɪɟчной ɭпɪɭɝой ɞɟɮоɪмɚции моɞɭль ɭпɪɭɝоɫɬи E, пɪɟɞɟл пɪочноɫɬи оɬноɫиɬɟль ноɟ ɪɚɜномɟɪноɟ оɬноɫиɬɟльноɟ ɪɚɜномɟɪноɟ ɯоɬим ɚнизоɬɪопию нɟоɛɯоɞимо ɞополниɬɟльныɟ мɟɯɚничɟɫкиɯ ɫɜойɫɬɜɚɯ коɬоɪыɟ пɪɟɞыɞɭщɟй ɜɜоɞɚ иɫɯоɞныɯ ɞɚнныɯ пɟɪɜом пɪиɛлижɟнии кɜɚɞɪɚɬной полɭчɟния коɪоɛки зɚɞɚнной ɜыɫоɬы ɭчɟɬом пɪипɭɫкɚ оɛɪɟзкɭ мɚɬɟмɚɬичɟɫкоɟ моɞɟлиɪоɜɚниɟ эɬой Пɪи моɞɟлиɪоɜɚнии ɪɚзмɟɪы зɚɝоɬоɜки ɭɬочняюɬɫя пɪомышлɟн ноɫɬи ɫɯɟмɚ коɪоɛки ɪɟзɭльɬɚɬы моɞɟлиɪоɜɚния ɝɪɚɮики пɪиɜɟɞɟны ɪиɫ . 77.1. мɚɬɟмɚɬичɟɫкоɝо моɞɟлиɪоɜɚния ɜыɬяжки оɫɟɫиммɟɬɪичной коɪоɛчɚɬой иɫɯоɞной зɚɝоɬоɜки пɪимɟняɟм ɬɟоɪию ɜыɬяжки Жɚɪкоɜɚ коɬоɪɚя зɚключɚɟɬɫя : 1) пɪоцɟɫɫ ɮоɪмоизмɟнɟния зɚɝо ɪɚзɛиɜɚɟм ɛольшоɟ элɟмɟнɬɚɪныɯ эɬɚпоɜ зɚɞɚɟм пɪиɪɚщɟниɟ ɯоɞɚ мɚɬɪицы ); 2) пɪи помощи конɟчныɯ элɟмɟнɬоɜ (finite element method - FEM [1]) нɚпɪя ɞɟɮоɪмиɪоɜɚнноɝо ɫоɫɬояния зɚɝоɬоɜки пɚɪɚ пɪоцɟɫɫɚ ɭчɟɬом ɭпɪочнɟния ɚнизоɬɪопии зɚɝоɬоɜки ɬɪɟния ɞɪɭɝиɯ ɮɚкɬоɪоɜ ; 3) ɚнɚлизиɪɭɟм ɫклɚɞкооɛɪɚзоɜɚния ɪɭшɟния зɚɝоɬоɜки ɪɚɫɫчиɬыɜɚɟм ноɜɭю зɚɝоɬоɜки поɫлɟ ɞɚн ноɝо пɪиɪɚщɟния ; 5) зɚɞɚɟм ɫлɟɞɭющɟɟ пɪиɪɚщɟниɟ пɭɚнɫонɚ поɜɬоɪяɟм опиɫɚнныɟ ɜышɟ моɞɟлиɪоɜɚния XV. ɫлɟɞɭющɟɝо пɪиложɟния компьюɬɟɪноɝо пɪоɟкɬиɪоɜɚ нɚпɪимɟɪ ɬɟɯнолоɝичɟɫкиɯ ɋИɋКОМПɊɌП или Computer-Aided Design/Computer-Aided Manufactur e systems, CAD/CAM systems) опишɟм мɟɬоɞы опɬимɚльноɝо ɪɚɫкɪоя коɬоɪыɯ плɚниɪɭɟɬɫя ). Ɋɚɫɫмоɬɪим шиɪоко ɪɚɫпɪоɫɬɪɚнɟнныɟ ɪɚɫкɪоя полоɫы коɬоɪыɟ моɝɭɬ пɪимɟнɟны пɪɚкɬикɟ ɪɚзличныɯ пɪоизɜоɞɫɬɜɚɯ оɫноɜныɯ ɜɚɪиɚн ɪɚзɪɟзки лиɫɬɚ полоɫы пɪоɞольный ɪиɫ . 78.1) попɟɪɟчный . 78.2). 79. 79.1. Мɟɬоɞ кнопки OK пɟɪɟɞɚчи Form1 Form3. Ƚлɚɜɚ 79. ɋиɫɬɟмɚ компьюɬɟɪноɝо пɪоɟкɬиɪоɜɚния ɬɟɯпɪоцɟɫɫоɜ 311 � button2-BackColor = Color::White; myColor = true; � button2-BackColor = Color::Yellow; myColor = false; 80. 80.1. опɬимɚльныɯ пɚɪɚмɟɬɪоɜ ɪɚзɪɟзки полоɫы Ƚлɚɜɚ 80. Пɪоɟкɬиɪоɜɚниɟ зɚɝоɬоɜиɬɟльныɯ 313 double A2 = pi*(Rn-s/2)*(2*(Rn-s/2)+pi*(d-2*Rn)/2); 314 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // N_strip_2 = Math::Floor(L/B); // D = DBlank(); t = D + a; // N_bl_st_1 = Math::Floor((L - a)/t); // N_bl_st_2 = Math::Floor((C - a)/t); // N_bl_1 = N_bl_st_1 * N_strip_1; // N_bl_2 = N_bl_st_2 * N_strip_2; // // �if (N_bl_1 = N_bl_2) { // � textBox5-Text = N_strip_1.ToString(); W = N_strip_1 * B; F = C - W; � textBox7-Text = F.ToString(); �textBox8-Text = C.ToString(); W_F = C; � textBox9-Text = (W/W_F).ToString(); Nbl = N_bl_1; } else { // � textBox5-Text = N_strip_2.ToString(); W = N_strip_2 * B; � textBox6-Text = W.ToString(); F = L - W; � textBox7-Text = F.ToString(); � textBox8-Text = L.ToString(); W_F = L; � textBox9-Text = (W/W_F).ToString(); Nbl = N_bl_2; } Ƚлɚɜɚ 80. Пɪоɟкɬиɪоɜɚниɟ зɚɝоɬоɜиɬɟльныɯ 315 80.2. Коɞ кнопки = Form3 ɪɚɫчɟɬɚ пɟɪɜой опɟɪɚции 81. 81.1. Мɟɬоɞ пɟɪɟɞɚчи иɫɯоɞныɯ Form3 Form5. Ƚлɚɜɚ 81. Пɪоɟкɬиɪоɜɚниɟ опɟɪɚций изɝоɬоɜлɟния зɚɝоɬоɜок � textBox6-Text = Nblst.ToString(); � textBox7-Text = G.ToString(); � textBox8-Text = (L - G).ToString(); K_G = L; � textBox9-Text = L.ToString(); � textBox6-Text = Nblst.ToString(); G = Nblst * t; � textBox7-Text = G.ToString(); � textBox8-Text = (C - G).ToString(); � textBox9-Text = C.ToString(); 318 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 81.4. Коɞ ɜыполнɟния � button1-Text = "Click"; myText = true; � button1-Text = "OK"; myText = false; 82. 82.1. Мɟɬоɞ пɟɪɟɞɚчи иɫɯоɞныɯ Form5 Form7. 320 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // ( ) // Fdraw 1000, Fdraw = pi*d_m*s*sig_u*k_draw/1000; 83. 83.1. Мɟɬоɞ пɟɪɟɞɚчи иɫɯоɞныɯ Form7 Form9. 322 ɝɪɚɮикɚ мɭльɬимɟɞиɚ Visual C++ 2005 // ( ) : � textBox8-Text = Nbl.ToString(); 1 : XVI. 84. Чɬоɛы пɟɪɟɞɚɬь пользоɜɚɬɟлями можɟм ɪɚзɪɚɛоɬчи пɪиложɟния зɚкɚзчикɭ ɪɚзɪɚɛоɬɚнноɟ пɪиложɟниɟ плɚɬ Microsoft Visual Studio ( чɟɬыɪɟɯ оɫноɜныɯ комплɟкɫɚɯ : Visual Basic, Visual C#, Visual C++, Visual J#), нɟоɛɯоɞимо ɜыполниɬь эɬɚпы пɪоɟкɬɚ ɭɫɬɚноɜки пɪиложɟния пɪоɟкɬ ɭɫɬɚноɜки пɪиложɟния пɪоɟкɬɚ ɪɚзɪɚɛоɬɚнноɝо ɪɚнɟɟ пɪиложɟния яɪлыкɚ Start ( поɫɬɪоɟниɟ ɪɟшɟния пɪоɟкɬоɜ пɪиложɟния пользоɜɚɬɟля Поɫлɟɞоɜɚɬɟльно ɪɚɫɫмоɬɪим ɫозɞɚния пɪоɟкɬɚ ɭɫɬɚноɜки ɫɬɪɚницɟ Visual Studio кнопкɭ New Project мɟню File, New, Project). New Project: окнɟ Project Types ɜыɞɟляɟм пɪоɟкɬɚ эɬом зɚкончили опиɫɚниɟ мɟɬоɞолоɝии ɪɚзɪɚɛоɬки компьюɬɟɪной ɝɪɚɮики ɫɚмоɝо ɫоɜɪɟмɟнноɝо ноɝо мощноɝо пɪоɝɪɚммиɪоɜɚния ɜыɫокоɝо ɭɪоɜня Visual C++ 2005 ɜɟɪɫии плɚɬɮоɪмы Microsoft Visual Studio 2005. мɟɬоɞолоɝия ɛыɬь иɫпользоɜɚнɚ пɪи ɪɚзɪɚɛоɬкɟ ɪɚзнооɛɪɚзныɯ пɪиложɟний Visual Studio 2005, пɪɟɞыɞɭщиɯ ɜɟɪɫий Ƚлɚɜɚ 84. Мɟɬоɞикɚ пɪиложɟния пользоɜɚɬɟлю 325 пɪиɜɟɞɟны эɬой ɮоɪмɚɬɚ (.doc) ɬɟкɫɬоɜоɝо ɪɟɞɚкɬоɪɚ Microsoft Word ɜɟɪɫии нɚпɪимɟɪ можно ɜɫɬɚɜляɬь люɛɭю пɪоɝɪɚммɭ нɚпɪимɟɪ ɬɚкой ɫɯɟмɟ Visual Studio ɫɬɪоим пɪоɟкɬ Visual C++ ( ноɜым ɫинɬɚкɫиɫом Visual Basic Visual C# 2002, 2003, 2004 или 2005 ɝоɞɚ мɟɬоɞикɟ ɫɚнной эɬом пɪоɟкɬɟ полɭчɚɟм опиɫɚнной мɟɬоɞɚ эɬо ɜозможно нɚпɪимɟɪ пɪи ɞɜойноɝо ɫоɛыɬия Properties Events ɮоɪмы Form1, ɭпɪɚɜлɟния понɟнɬɚ ɬɟкɫɬоɜом ɪɟɞɚкɬоɪɟ Word оɬкɪыɜɚɟм компɚкɬ ɮоɪмɚɬɚ (.doc) книɝи ɝипɟɪɫɫылкɟ номɟɪом ɞɚнной оɝлɚɜлɟнии нɚɯоɞим ɜыɞɟляɟм мышью коɬоɪый ɯоɬим шɚɛлон мɟɬо копиɪɭɟм (Clipboard) пɪи помощи ɫɬɚнɞɚɪɬноɝо пɪиɟмɚ пɪɚɜый ɜыɞɟлɟнномɭ Копиɪоɜɚɬь (Copy). ȿɫɬɟɫɬɜɟнно ɫɚм шɚɛлон ɪоɜɚɬь нɭжно Оɬкɪыɜɚɟм нɚпɪимɟɪ , Form1.h пɪоɟкɬɚ Visual C++ ɜɫɬɚɜляɟм пɪɚɜый ȼɫɬɚɜиɬь Paste) оɛмɟнɚ шɚɛлон мɟɬоɞɚ нɟɜозможно полɭчиɬь ɞиɫкɚ копиɪɭɟм ɜɟɫь мɟɬоɞ мɟɬоɞы ɜɫɬɚɜляɟм пɪоɟкɬ Visual C++. пɪоɝɪɚммы лиɫɬинɝоɜ нɟоɞнокɪɚɬно пɪоɜɟɪɟны ɚɜɬоɪом ɜыполняɬьɫя пɪɟɞɭпɪɟжɞɟний ошиɛок пɪиɜоɞим пɪоɟкɬы Visual Studio 2005, нɟɜозможно пɪɟɞыɞɭщиɯ ɜɟɪɫияɯ Visual Studio 2002, 2003 2004 ɝоɞоɜ Пɪоɝɪɚммы моɝɭɬ иɫпользоɜɚны пɪи ɪɚзɪɚɛоɬкɟ ɪɚзнооɛ ɪɚзныɯ пɪиложɟний оɫноɜɟ Visual Studio 2005, оɫноɜɟ пɪɟɞыɞɭ ɜɟɪɫий Жɚɪкоɜ . Visual C# .NET ɬɟɯникɟ .: Жɚɪкоɜ , 2002. Жɚɪкоɜ ɋɚмоɭчиɬɟль Жɚɪкоɜɚ

Приложенные файлы

  • pdf 26449036
    Размер файла: 1 MB Загрузок: 0

Добавить комментарий