def topi(a,h,i):
m = a%(2*pi)
r=0.0
if m<h: r=i
return r
pydriver-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»Π° ΡΠ½Π΅ΡΠ³ΠΈΠΈ (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ "Energ" Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΡΠΈΠ²ΡΡ IPO), ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
p.topi(ob('DriveShaftPart').RotX/2+m.pi,0.3,0.5)
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΡΠΈΡ Β«ΠΎΠ³ΠΎΠ½ΡΒ» Π² ΡΠ²Π΅ΡΠ΅ Π·Π°ΠΆΠΈΠ³Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΡΡ 17 Π³ΡΠ°Π΄ΡΡΠ°Ρ (0.3 ΡΠ°Π΄ΠΈΠ°Π½), ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΡΠ½Π΅ΡΠ³ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π² 0.5 .
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ»ΠΈΠ½Π΄Ρ ΠΈ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΠ»ΠΈΡΡ ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ, Π½Π°ΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ»ΠΈΠ½Π΄ΡΠΎΠ², Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΡΠΎΡΠ° ΠΊΠ°ΠΊ Π½Π° Π²Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ ΠΈ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΆΠ°Π² Shift + D, ΠΎΡΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°Π² Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ IPO-ΠΊΠ°Π½Π°Π»Π°.
ΠΠΎ Π΅ΡΡΡ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Shift + D, Π²ΠΌΠ΅ΡΡΠΎ Alt + D ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΌΠ΅ΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ, ΡΠ΅ΠΊΡΡΡΡΡ ΠΈ IPO. ΠΠ»Π΅Π½Π΄Π΅Ρ, ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, ΠΊΠΎΠΏΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π½Π΅ΡΠΊΠ»ΡΠΆΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ IPO ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ½Ρ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π·Π°ΡΡΠΎΠ½ΡΠ»ΠΎ Π±Ρ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ (Π½Π°ΠΆΠ°Π² Π½Π° ΠΏΠΎΠ»Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΠΈΡ ΠΊΡΠΈΠ²ΡΡ IPO, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ² ΡΠ²ΠΎΡ ΡΠΎΠ³Π»Π°ΡΠΈΠ΅ ΡΠΎ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ make single user?), Π½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΡΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΡΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Duplicate with object) Π² ΠΏΠ°Π½Π΅Π»ΠΈ Edit Methods, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Π²ΡΡΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΡΠΈΠ²ΡΠ΅ IPO, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½Ρ Π² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠ΅ΡΡΡΠ΅Ρ ΡΠΈΠ»ΠΈΠ½Π΄ΡΠΎΠ²ΡΠΉ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΉ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ Π²Π΅Π΄ΡΡΠ΅Π³ΠΎ Π²Π°Π»Π° ΠΊ ΠΏΠΎΡΡΠ½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ engine001.blend. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://vimeo.com/7170769, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (Constraints) ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈ ΠΊΠΎΡΡΡΠΌ. Π ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° append() Π°ΡΡΠΈΠ±ΡΡΠ° constraints. ΠΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅Π»ΠΎΠΊ ΡΠ°ΡΠΎΠ² ΠΈΠ· rigged clock (ΠΠ»Π°Π²Π° 3, ΠΡΡΠΏΠΏΡ Π²Π΅ΡΡΠΈΠ½ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ) Π΄Π»Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΠΎΠΊΡΡΠ³ ΠΎΡΠΈ Z. ΠΠΎΠ΄, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΄Π²ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ import, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°Ρ Π΄Π»ΠΈΠ½Ρ ΠΊΠΎΠ΄Π°:
from Blender.Constraint import Type
from Blender.Constraint import Settings
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: obbones, ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΠ»Π΅Π½Π΄Π΅ΡΠ°, Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ Π°ΡΠΌΠ°ΡΡΡΠΎΠΉ (ΡΠΎ Π΅ΡΡΡ, Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΠΌΠ°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ) ΠΈ bone, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ. ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ Ρ ΠΊΠΎΡΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π°ΡΠΌΠ°ΡΡΡΡ, Π° ΠΏΠΎΠ·ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π°ΡΠΌΠ°ΡΡΡΡ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ Π°ΡΠΌΠ°ΡΡΡΠ΅, ΠΈ Π²ΡΠ΅ ΠΏΠΎΠ·Ρ Π±ΡΠ΄ΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΊ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ Π°ΡΠΌΠ°ΡΡΡΠ΅, ΡΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΠ·Ρ.
ΠΡΠ°ΠΊ, ΡΡΠ°ΡΡΡΡ, ΡΡΠ½ΠΊΡΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ·Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ. ΠΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ (ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠ²ΡΠ·ΡΠ²Π°Π»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΡΠΈ):
def zrotonly(obbones,bone):
poseob = obbones.getPose()
bigarmpose = poseob.bones[bone]
c=bigarmpose.constraints.append(Type.LIMITROT)
c[Settings.LIMIT]=Settings.LIMIT_XROT|
Settings.LIMIT_YROT
c[Settings.XMIN]=0.0
c[Settings.XMAX]=0.0
c[Settings.YMIN]=0.0
c[Settings.YMAX]=0.0
poseob.update()
ΠΠ½ΠΎΠ²Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ c ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΡΠΎΠΊΠ°Ρ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ LIMIT (ΡΡΠΎ Π±ΠΈΡΠΎΠ²Π°Ρ ΠΌΠ°ΡΠΊΠ°), Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΡΠΌ X ΠΈ Y. ΠΠ°Π»Π΅Π΅, ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π²ΠΎΠΊΡΡΠ³ ΡΡΠΈΡ ΠΎΡΠ΅ΠΉ ΡΠ°Π²Π½ΡΠΌ 0.0, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π»ΡΠ±ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΈΠ³Π³ΠΈΠ½Π³Π΅ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ΅Π»Π΅ΡΠ° ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΠ΅Π΄Π΅Π»Ρ Π²Π΅Π»ΠΈΡΠΈΠ½ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌΡΠΌΠΈ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΡΡΠΌΠΈ. Π Π² ΠΊΠΎΠ½ΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ pose (ΠΏΠΎΠ·Ρ) Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ, ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ update().
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
Π’Π°ΠΌ, Π³Π΄Π΅ pydrivers ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ IPO-ΠΊΡΠΈΠ²ΠΎΠΉ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ, PyConstraints (ΠΏΠΈΡΠΎΠ½-ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π°ΠΌ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΠΠ»Π΅Π½Π΄Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΈ ΡΠ°ΡΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΏΡΠΎΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Ρ ΠΌΠ΅ΡΡΠ° Π½Π° ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π½Π΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, Π° Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΡΠΎΡΠΎΠ² ΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½Π½ΡΡ Π±ΡΠ΄ΠΎΠΊ ΠΏΠΎ ΡΠ΅ΡΠΊΠ΅ ΡΠ»ΠΈΡ. ΠΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡΠΈΡΡ ΡΡΠΎΠ³ΠΎ? ΠΠ²Π΅Π΄ΠΈΡΠ΅ pyconstraints.
PyConstraints - ΠΠΈΡΠΎΠ½-ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΠ΅ΠΉ ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅:
#BPYCONSTRAINT
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ doConstraint(), doTarget(), ΠΈ getSettings(). ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²e Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΈΠ»ΠΈ ΡΠ΅Π»Ρ, ΠΈΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ°Π΅Ρ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Options, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΡΠ°Π» pyconstraint. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΊΡΠΈΠ½ΡΠΎΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ pyconstraint.
Π‘Π°ΠΌΡΠΉ Π»Π΅Π³ΠΊΠΈΠΉ ΠΏΡΡΡ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅Π»Π°ΡΡ β ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΏΠΎ ΠΌΠ΅Π½Ρ Text | Script Templates | Script Constraint. ΠΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π²Π½ΠΈΠ·Ρ ΠΎΠΊΠ½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°.
Π¨Π°Π±Π»ΠΎΠ½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ, ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ Π³ΠΎΠ»ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°Π±Π»ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ Ρ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ. ΠΡ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ getSettings() Π·Π΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠΈ ΠΏΡΡΡ. ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ. Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΌΠ°ΡΡΡΠ°Π± ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΡΡΠ°Π½ΡΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
def doConstraint(obmatrix, targetmatrices, idprop):
# ΠΡΠ΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ
# Π΄ΠΎΡΡΡΠΏΠ°.
obloc = obmatrix.translationPart() # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
obrot = obmatrix.toEuler() # Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅
obsca = obmatrix.scalePart() # ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
# ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈ
# ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π·Π΄Π΅ΡΡ
# ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²ΡΠ°ΡΠ΅Π½ΠΈΡ,
# ΠΌΠ°ΡΡΡΠ°Π±Π°,
mtxloc = Mathutils.TranslationMatrix(obloc)
mtxrot = obrot.toMatrix().resize4x4()
mtxsca = Mathutils.Matrix([obsca[0],0,0,0],
[0,obsca[1],0,0],
[0,0,obsca[2],0], [0,0,0,1])
# Π Π΅ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΡΡ
# ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.
outputmatrix = mtxsca * mtxrot * mtxloc
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΌΠ°ΡΡΠΈΡΡ.
return outputmatrix
Π ΡΡΠ½ΠΊΡΠΈΡ doConstraint() ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ»ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
ΠΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ, - Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ β ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΌΠ°ΡΡΡΠ°Π± ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π§Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ x, y, z, ΡΠ°ΡΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±Π° Π±ΡΠ΄Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΡΡΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² Π²Π΄ΠΎΠ»Ρ ΠΎΡΠ΅ΠΉ x, y, z. Π§Π°ΡΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π²Π΅ΠΊΡΠΎΡΠΎΠΌ ΠΠΉΠ»Π΅ΡΠ° Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠΊΡΡΠ³ ΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΎΡΠ΅ΠΉ. (ΡΠ³Π»Ρ ΠΠΉΠ»Π΅ΡΠ° ΠΎΡΠ΅Π½Ρ ΡΠΏΡΠΎΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, Π½ΠΎ ΠΏΠΎ Π½Π°ΡΠ°Π»Ρ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΄Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. Π Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π΅ΡΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ http://ru.wikipedia.org/wiki/Π£Π³Π»Ρ_ΠΠΉΠ»Π΅ΡΠ°, Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ Π»Π΅Π³ΡΠ΅ Π΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠ³Π»Π°Ρ ΠΠΉΠ»Π΅ΡΠ° ΠΊΠ°ΠΊ ΠΎ Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΎΡΠ΅ΠΉ x, y, z. Π£Π³Π»Ρ ΠΠΉΠ»Π΅ΡΠ° ΡΡΡΠ΄Π½Ρ? ΠΠΎΡ ΠΎΡ ΠΊΠ²Π°ΡΠ΅ΡΠ½ΠΈΠΎΠ½ΠΎΠ² ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΌΠΎΠ·Π³ Π²Π·ΡΡΠ²Π°Π΅ΡΡΡ! - Π²ΠΎΠ·ΠΌΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ.) ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π»ΡΠ±ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ.