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

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

Автор Michel Anders

      for e1,e2 in zip( expand.ordered_edgeloop(loop[l]),

                        expand.ordered_edgeloop(eloop)):

         f1=(e1.v1.index,e1.v2.index,

             e2.v2.index,e2.v1.index)

         f2=(e1.v2.index,e1.v1.index,

             e2.v2.index,e2.v1.index)

         faces.append(least_warped(me,f1,f2))

      me.faces.extend(faces)

ΠœΡ‹ опустили ΠΊΠΎΠ΄ выдавливания Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠΉ ΠΏΠ΅Ρ‚Π»ΠΈ символа, Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ заполняСтся Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ всС Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π²Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (это - Π²Ρ‹Π΄Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° символов). Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ fill(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ любой Π½Π°Π±ΠΎΡ€ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΉ плоскости. Он Π΄Π°ΠΆΠ΅ позаботится ΠΎΠ± отвСрстиях (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ острову Π² Π±ΡƒΠΊΠ²Π΅ e):

   deselect_all_edges(me)

   select_edges(me,'TextBottom')

   me.fill()

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ cartouche - просто вопрос добавлСния ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Ρ‘Π±Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π°ΡˆΠΈΡ… символов. Если этот Ρ€Ρ‘Π±Π΅Ρ€Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ вмСстС с Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½ Outline, ΠΌΠΎΠΆΠ½ΠΎ снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ fill() для заполнСния этого cartouche. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ здСсь. НСсколько Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²: ΠΌΡ‹ ΠΏΠΎ возмоТности ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ Π² нашСм мСшС Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ triangleToQuad(), Π·Π°Ρ‚Π΅ΠΌ подраздСляСм мСш. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ добавляСм ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ subsurface, устанавливаСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ сглаТивания (smooth) Π½Π° всСх гранях ΠΈ пСрСсчитываСм Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ всСх Π³Ρ€Π°Π½Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ согласованно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π½Π°Ρ€ΡƒΠΆΡƒ.

   me.triangleToQuad()

   me.subdivide()


   mod = ob.modifiers.append(

                      Blender.Modifier.Types.SUBSURF)

   mod[Blender.Modifier.Settings.LEVELS]=2


   select_all_faces(me)

   set_smooth(me)

   select_all_edges(me)

   me.recalcNormals()

Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π—Π°Ρ…Π²Π°Ρ‚Π°:

ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, доступныС Π² Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅. Π•ΡΡ‚ΡŒ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½, Π½ΠΎ создаётся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ эквивалСнта Π² графичСском интСрфСйсС Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°. Π­Ρ‚ΠΎ - Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Hook (Π—Π°Ρ…Π²Π°Ρ‚). Π—Π°Ρ…Π²Π°Ρ‚ Π² Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅ - способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎ vertex parenting, Π³Π΄Π΅ ΠΌΡ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹), ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступно Ρ‡Π΅Ρ€Π΅Π· мСню Mesh | Vertex | Add Hook Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ рСдактирования. ПослС добавлСния ΠΎΠ½ появится Π² спискС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π—Π°Ρ…Π²Π°Ρ‚Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ отличаСтся ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Π½ΠΎ ΡƒΠ²Ρ‹, Π½ΠΈ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ, Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² API.


Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ° ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ Π“Ρ€Π°Π²ΠΈΡ€ΠΎΠ²ΠΊΠ°:

К соТалСнию, опробованная ΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° engrave.py (с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π΅ΠΉ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ expand.py), скачанная с сайта ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ‚Π°ΠΊ красиво, ΠΊΠ°ΠΊ это описано Π² тСкстС. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· придётся Π½Π°Π±Ρ€Π°Ρ‚ΡŒΡΡ наглости ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Π²Ρ‚ΠΎΡ€Π°.

1. ΠŸΡ€ΠΎΡΡ‚Π°Ρ ошибка Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅: Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ строки:

me.subdivide()

me.triangleToQuad()

me.subdivide()

ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ всС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, Π° ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΎΠ½ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ всС, ΠΊΡ€ΠΎΠΌΠ΅ основного ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π±ΡƒΠΊΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, мСш подраздСляСтся Π½Π° ΡƒΡΡ‚Ρ€Π°ΡˆΠ°ΡŽΡ‰Π΅Π΅ количСство Π»ΠΈΡˆΠ½ΠΈΡ… Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². Π― Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Π±ΠΎΡ€ всСх Ρ€Ρ‘Π±Π΅Ρ€.

select_all_edges(me)

me.triangleToQuad()

me.subdivide()

2. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠΊΠ°Π½Ρ‚ΠΎΠ²ΠΊΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… символов происходила Π²Π½ΡƒΡ‚Ρ€ΡŒ, Π° Π½Π΅ Π½Π°Ρ€ΡƒΠΆΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ, Ρ‚.Π΅. ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΎ, являСтся Π»ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, Π½Π΅ всСгда срабатывала ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. На ΠΌΠΎΠΉ взгляд, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² этой строкС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ in_polygon() модуля expand:

if cross(p,vec(1.0,0.0,0.0),polygon[i].co,

               polygon[(i+1)%n].co):

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

3. Π‘Π°ΠΌΠΎΠ΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ΅: Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ пространства ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ выполняСтся прСсловутой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fill() (Π΅Ρ‘ Π°Π½Π°Π»ΠΎΠ³ Π² интСрфСйсС Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° - Shift-F), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ мноТСство Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² с ΠΎΡ‡Π΅Π½ΡŒ острыми ΡƒΠ³Π»Π°ΠΌΠΈ. Π‘ Ρ‚Π΅ΠΌ ΠΆΠ΅ успСхом ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ сразу ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ булСановскоС Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΈ Π½Π΅ ΠΌΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ красивого заполнСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π½ΠΎ, Π΄ΡƒΠΌΠ°ΡŽ, такая функция вряд-Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ простой.


ΠŸΠΎΠ»Π΅Ρ‚ искр

Π˜ΡΠΊΡ€Ρ‹ ΠΈ всС яркиС эффСкты ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ подходящСй систСмы частиц ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² систСм частиц ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вСсов Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ испускаСмых частиц.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ элСктричСского Ρ„Π΅Π½ΠΎΠΌΠ΅Π½Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ "Огни святого Эльма". Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ эффСкт, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…, особСнно Π² Π½Π°Ρ‡Π°Π»Π΅ Π³Ρ€ΠΎΠ·Ρ‹, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ. Π­Ρ‚ΠΎ свСчСниС называСтся  ΠΊΠΎΡ€ΠΎΠ½Π½Ρ‹ΠΉ   разряд (см.,   Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, http://ru.wikipedia.org/wiki/Огни_святого_Эльма), ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π½Π° острых ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… частях Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… структур, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ€Π°Π΄ΠΈΠΎΠ°Π½Ρ‚Π΅Π½Π½Π°Ρ… ΠΈΠ»ΠΈ Π³Ρ€ΠΎΠΌΠΎΠΎΡ‚Π²ΠΎΠ΄Π°Ρ…, Π³Π΄Π΅ элСктричСскоС ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ этот эффСкт, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сильноС.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²Π΄ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° количСство частиц, испускаСмых мСшСм, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ локальная ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Π°, ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ, Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ, ΠΊΠ°ΠΊ вСс Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½. Π—Π°Ρ‚Π΅ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту Π³Ρ€ΡƒΠΏΠΏΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ плотности Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ контСкста частиц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ эмиссиСй.

МСш ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, которая Π±Ρ‹ аппроксимировала Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΡƒ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ аппроксимируСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ Π³Ρ€ΡƒΠ±Ρ‹ΠΌ способом (Ссли Π½ΡƒΠΆΠ½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ   тяТСлой   ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ,   смотритС http://en.wikipedia.org/wiki/Mean_curvature),   вычисляя   ΡΡ€Π΅Π΄Π½ΡŽΡŽ Ρ€Ρ‘Π±Π΅Ρ€Π½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ всСх связанных с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Ρ€Ρ‘Π±Π΅Ρ€ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² мСшС. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ опрСдСляСм Ρ€Ρ‘Π±Π΅Ρ€Π½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ ΠΊΠ°ΠΊ скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Ρ€Π΅Π±Ρ€Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π²Π΅ΠΊΡ‚ΠΎΡ€, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΊ Π΅Ρ‘ сосСдкС). Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Ρ€Π΅Π±Ρ€ΠΎ изгибаСтся Π²Π½ΠΈΠ· ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли ΠΎΠ½ΠΎ изгибаСтся Π²Π²Π΅Ρ€Ρ…. ΠœΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ этот Π·Π½Π°ΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ понятиС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ для ΠΏΠΈΠΊΠΎΠ², Π° Π½Π΅ для Π²ΠΏΠ°Π΄ΠΈΠ½. По-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° это Ρ‚Π°ΠΊ: Π² областях ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ ΡƒΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΡŽ ΠΈ Ρ€Π΅Π±Ρ€ΠΎΠΌ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡΡ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, большС 90Β°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ рисунок ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ - ΠΎΠ½ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΡΠ΅Ρ€ΠΈΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½, связанных Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° связанная с Π½Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ (стрСлками). Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ a, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ, Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ b - ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ. Π”Π²Π΅ ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π±ΡƒΠΊΠ²ΠΎΠΉ c, ΠΎΠ½ΠΈ находятся Π² области Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹ - Π² этих мСстах ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ плоская, ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ пСрпСндикулярна Ρ€Ρ‘Π±Ρ€Π°ΠΌ.




РасчСт локальной ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρ‹

Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая вычисляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² мСшС, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… вСсов, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

from collections import defaultdict

def localcurvature(me,positive=False):


   end=defaultdict(list)

   for e in me.edges:

      end[e.v1.index].append(e.v2)

      end[e.v2.index].append(e.v1)


   weights=[]

   for v1 in me.verts:

      dvdn = []

      for v2 in end[v1.index]:

         dv = v1.co-v2.co

         dvdn.append(dv.dot(v1.no.normalize()))

      weights.append((v1.index,sum(dvdn)/max(len(dvdn),

                      1.0)))


   if positive:

      weights = [(v,max(0.0,w)) for v,w in weights]


   minimum = min(w for v,w in weights)

   maximum = max(w for v,w in weights)

   span = maximum - minimum


   if span > 1e-9:

      return [(v,(w-minimum)/span) for v,w in weights]

   return weights

Ѐункция localcurvature() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ мСш ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ с индСксом Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ Π΅Ρ‘ вСсом. Если Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - Π˜ΡΡ‚ΠΈΠ½Π°, любой рассчитанный ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ вСс отвСргаСтся.