Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НаписаниС скриптов для Blender 2.49Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 10

Автор Michel Anders

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ наши списки ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ индСксов Π³Ρ€Π°Π½Π΅ΠΉ ΠΈΠ· модуля mymesh, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ способ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ мСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² нашСй сцСнС ΠΈ добавлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² MVert ΠΈ MFace Π² этот мСш. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

me=Blender.Mesh.New('Bug')

me.verts.extend(verts)

me.faces.extend(faces)

scn=Blender.Scene.GetCurrent()

ob=scn.objects.new(me,'Bug')

scn.objects.active=ob

me.remDoubles(0.001)

me.recalcNormals()

ΠŸΠ΅Ρ€Π²Π°Ρ строка создаСт Π½ΠΎΠ²Ρ‹ΠΉ мСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Bug (Π–ΡƒΠΊ). Он Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Π΅Ρ€ΡˆΠΈΠ½, Ρ€Ρ‘Π±Π΅Ρ€ ΠΈΠ»ΠΈ Π³Ρ€Π°Π½Π΅ΠΉ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ вставлСн Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°, ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠΎΠΊΠ° Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Π‘Ρ†Π΅Π½Π΅. Если имя мСша ΡƒΠΆΠ΅ сущСствуСт, ΠΊ Π½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ суффикс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Bug.001).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ строки Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ Π² мСшС. Атрибут verts – это мСсто, ΠΊΡƒΠ΄Π° ссылаСтся наш список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² MVert. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ extend(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x, y, ΠΈ z создаваСмых Π²Π΅Ρ€ΡˆΠΈΠ½. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ extend() Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° faces ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Ρ‚Ρ€ΠΈ ΠΈΠ»ΠΈ большС индСксов, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вмСстС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π³Ρ€Π°Π½ΡŒ. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ здСсь Π²Π°ΠΆΠ΅Π½: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС вновь созданныС Π³Ρ€Π°Π½ΠΈ Π½Π΅ смогут ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ…. НСт нСобходимости ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ€Ρ‘Π±Ρ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ нСявно создаст Ρ€Ρ‘Π±Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

МСш ΠΏΠΎ своСй сути Π΅Ρ‰Π΅ Π½Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ), ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ сцСну ΠΈ добавляСм Π² Π½Π΅Ρ‘ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. АргумСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ new() - мСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали Ρ€Π°Π½Π΅Π΅, ΠΈ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Имя, Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡˆΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° мСшСй ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… пространствах ΠΈΠΌΡ‘Π½. Как ΠΈ с мСшСм, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ имя Π±ΡƒΠ΄Π΅Ρ‚ сдСлано ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ посрСдством добавлСния суффикса. Если имя ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ, Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏ своСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° (Mesh Π² нашСм случаС).

Π’Π½ΠΎΠ²ΡŒ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½, Π½ΠΎ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ исправим это, присвоив наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² scene.objects.active.

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


ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ мСша

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сущСства ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ примСняли Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ этим ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ склСим ΠΈΡ… вмСстС. Π’ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅ 2.49, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эти дСйствия, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² API. ΠœΡ‹ опрСдСляСм эти Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Tools (инструмСнты), Π½ΠΎ ΠΌΡ‹ освСтим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… здСсь, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ нСсколько интСрСсных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

НСкоторыС дСйствия, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠΊΡ€ΡƒΠ³ срСднСй Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½ просты, Π½ΠΎ присоСдинСниС Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ слоТнСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ скрСщиваниС Ρ€Ρ‘Π±Π΅Ρ€ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈ плоскими ΠΈ Π½Π΅Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° Π½Π°Π±ΠΎΡ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½ (ΠΈΠ»ΠΈ ΠΊΡ€Π°Π΅Π²Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°) вмСстС. Но пробуя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅, ΠΈ провСряя, Ссли Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΠΏΠ°Ρ€Π°ΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΌΡ‹ обСспСчиваСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… пСрСсСчСний, ΠΈ искаТСния Π±Ρ‹Π»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (хотя ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ искаТСния Π³Ρ€Π°Π½Π΅ΠΉ, Ссли Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅).


Π‘Ρ…Π΅ΠΌΠ° ΠΊΠΎΠ΄Π° сшивания Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая создаСт Π½ΠΎΠ²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

1. Π£Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΈ Π½Π΅Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ.

2. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π° Π² Ρ†ΠΈΠΊΠ»Π΅ 1:

1. Найти Ρ€Π΅Π±Ρ€ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ 2, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π»ΠΈΠΆΠ΅ всСго.

2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΡŒ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΡƒΡŽ эти Π΄Π²Π° Ρ€Π΅Π±Ρ€Π°.

Ѐункция, которая осущСствляСт эту довольно ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π½Π° Π²ΠΈΠ΄ схСму:

def bridge_edgeloops(e1,e2,verts):

    e1 = e1[:]

    e2 = e2[:]

    faces=[]

    if len(e1) == len(e2) and len(e1) > 0 :

Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹: Π΄Π²Π° списка Ρ€Ρ‘Π±Π΅Ρ€ ΠΈ список Π²Π΅Ρ€ΡˆΠΈΠ½. Π Ρ‘Π±Ρ€Π° прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… (индСксы Π² спискС Π²Π΅Ρ€ΡˆΠΈΠ½ verts), Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ - Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ x, y, ΠΈ z.

ΠŸΠ΅Ρ€Π²Π°Ρ Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ сдСлаСм - создадим ΠΊΠΎΠΏΠΈΠΈ Π΄Π²ΡƒΡ… Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… списков, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ списки Π² ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ контСкстС. Бписок Π³Ρ€Π°Π½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, инициализируСтся Π² пустой список, ΠΈ ΠΌΡ‹ провСряСм Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΡΡ‚ΡŒ ΠΈ равСнство Π΄Π»ΠΈΠ½ ΠΎΠ±ΠΎΠΈΡ… Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… списков. Если это подтвСрТдаСтся, ΠΌΡ‹ приступаСм ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ куску:

for a in e1:

    distance = None  # расстояниС

    best = None      # Π»ΡƒΡ‡ΡˆΠΈΠΉ

    enot = []        # ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°

ΠœΡ‹ повторяСм ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Π±Ρ€Ρƒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ спискС, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° это Ρ€Π΅Π±Ρ€ΠΎ Ρ‡Π΅Ρ€Π΅Π· a. ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ distance содСрТит расстояниС Π΄ΠΎ блиТайшСго Ρ€Π΅Π±Ρ€Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠΌ спискС, Π° best Π±ΡƒΠ΄Π΅Ρ‚ ссылкой Π½Π° это Ρ€Π΅Π±Ρ€ΠΎ. enot - список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ‚ всС Ρ€Ρ‘Π±Ρ€Π° ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π½Π° большСм расстоянии, Ρ‡Π΅ΠΌ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π΅.

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, enot Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС Ρ€Ρ‘Π±Ρ€Π° ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ списка минус ΠΎΠ΄Π½ΠΎ - ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ считаСм блиТайшим. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ enot Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ список, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ список ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ Ρ€Π΅Π±Ρ€ΠΎ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. ΠœΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ список Ρ€Ρ‘Π±Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ исчСрпан:

while len(e2):

    b = e2.pop(0)

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Ρ€Π΅Π±Ρ€ΠΎ ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ списка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ рассматриваСм, называСтся b. Для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ, ΠΌΡ‹ опрСдСляСм расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ a ΠΈ b ΠΊΠ°ΠΊ сумму расстояний ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π² a ΠΈ b. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ провСряСм, Π½Π΅ окаТСтся Π»ΠΈ ΠΊΠΎΡ€ΠΎΡ‡Π΅ сумма расстояний Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ b. Если ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ такая ситуация, ΠΌΡ‹ мСняСм Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Ρ€Π΅Π±Ρ€Π΅ b. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТным способом дСйствий, Π½ΠΎ суммированиСм Π΄Π²ΡƒΡ… расстояний ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Ρ‘Π±Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ½Π΅Π°Ρ€Π½Ρ‹ (ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹) - ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ‚Π΅ΠΌ самым ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ число нСплоских Π³Ρ€Π°Π½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ созданы. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ, Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΡ€Π°ΠΉ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌΡƒ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅   искорёТСнного   Π²   Π²ΠΈΠ΄Π΅   галстука-Π±Π°Π±ΠΎΡ‡ΠΊΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ рисункС:



РСализация Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ рисунок, Π³Π΄Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° - псСвдонимы Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Mathutil.Vector, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ наши ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y, ΠΈ z Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π΄Π»ΠΈΠ½Ρƒ.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ вычисляСм расстояниС:

    d1 = (vec(verts[a[0]]) - vec(verts[b[0]])).length + \

    (vec(verts[a[1]]) – vec(verts[b[1]])).length

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ провСряСм с ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ Ρ€Π΅Π±Ρ€ΠΎΠΌ b, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ расстояниС ΠΊΠΎΡ€ΠΎΡ‡Π΅:

    d2 = (vec(verts[a[0]]) - vec(verts[b[1]])).length + \

    (vec(verts[a[1]]) - vec(verts[b[0]])).length

    if d2<d1 :

        b =(b[1],b[0])

        d1 = d2

Если рассчитанноС расстояниС Π½Π΅ самоС ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅, ΠΌΡ‹ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π±Ρ€ΠΎ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ:

    if distance == None or d1<distance :

        if best != None:

            enot.append(best)

        best = b

        distance = d1

    else:

        enot.append(b)

Бписок ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½Π½Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€ становится Π½ΠΎΠ²Ρ‹ΠΌ e2, Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ заполняСм список Π³Ρ€Π°Π½Π΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ Ρ€Ρ‘Π±Π΅Ρ€, ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π½ΠΎΠ²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ списку Ρ€Ρ‘Π±Π΅Ρ€ (a) – Π΄ΠΎΠΏ. ΠΏΠ΅Ρ€.

e2 = enot

faces.append((a,best))

НаконСц, ΠΌΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ наш список Π³Ρ€Π°Π½Π΅ΠΉ, состоящий ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π΄Π²ΡƒΡ… Ρ€Ρ‘Π±Π΅Ρ€, Π² список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… индСксов:

return [(a[0],b[0],b[1],a[1]) for a,b in faces]

Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ большС Π² этом скриптС, ΠΈ ΠΌΡ‹ вновь Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ creepycrawlies.py Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅, Π³Π΄Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρƒ ΠΊ нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ бСстиария, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы скриптом.




ΠžΡΠ»Π΅ΠΏΠΈΡ‚Π΅ вашСго босса - гистограммы Π² стилС Π‘Π»Π΅Π½Π΄Π΅Ρ€

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π‘Π»Π΅Π½Π΄Π΅Ρ€ адаптируСтся ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ создания 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π’Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внСшниС Π΄Π°Π½Π½Ρ‹Π΅ (элСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ CSV) ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ создания ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° прСдставлСнной Π² 3D гистограммы.