ΠΡΡΡΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ
ΠΠ°Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ ΠΊΠ°ΠΊ Π΄Π»Ρ Π΄Π²ΡΡ ΠΌΠ΅ΡΠ½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΡΡΡ ΠΌΠ΅ΡΠ½ΠΎΠΉ. ΠΠ°ΠΏΠΈΡΠ°Π½Π° Π½Π° cython, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΡΡΡΠ°Ρ. ΠΠ΅Π³ΠΊΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ/ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip install easyvec --upgrade
2d Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ 2d Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ:
2d ΡΡΡΡΠΊΡΡΡΠ° | easyvec-ΠΊΠ»Π°ΡΡ |
---|---|
ΠΠ΅ΠΊΡΠΎΡ/ΡΠΎΡΠΊΠ° | Vec2 |
ΠΠ°ΡΡΠΈΡΠ° 2Ρ 2 | Mat2 |
ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ AABB | Rect |
ΠΠΎΠ»ΠΈΠ³ΠΎΠ½/ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½ΠΈΡ | PolyLine |
Π ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΄ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΡΠ΅Π·ΠΊΠ°ΠΌΠΈ, Π»ΡΡΠ°ΠΌΠΈ, Π»ΠΈΠ½ΠΈΡΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ
Vec2
ΠΠ΅ΠΊΡΠΎΡ/ΡΠΎΡΠΊΠ° ΠΠΎΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ
from easyvec import Vec2
v1 = Vec2(1,2)
v2 = Vec2.from_list([1,2])
v3 = Vec2.from_list([0,-100,1,2,100], start_ind=2)
v4 = Vec2.from_dict({'x':1, 'y': 2})
v5 = Vec2.from_dict({'x':1, 'y': 2, 'some': 'data'})
v6 = Vec2(100,200) / 100
v7 = Vec2(100,200) - (99,198)
v8 = Vec2(0,1) + 1
# Π²ΡΠ΅ ΡΡΠΈ Π²Π΅ΠΊΡΠΎΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ ΠΈ ΡΠ°Π²Π½Ρ Vec2(1,2)
ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
v1 = Vec2(1,2)
print(v1) # (1.00, 2.00)
print(repr(v1)) # Vec2(1.0, 2.0)
print(v1.x) # 1.0
print(v1.y) # 2.0
print(v1[0]) # 1.0
print(v1[1]) # 2.0
print(v1['x']) # 1.0
print(v1['y']) # 2.0
print(v1.as_np()) # [1. 2.]
print(v1.as_tuple()) # (1.0, 2.0)
print(v1.to_dict()) # {'x': 1.0, 'y': 2.0}
x, y = v1
print(x, y) # 1.0 2.0
for a in v1:
print(a) # 1.0
# 2.0
def foo(x, y):
print(x, y)
foo(*v1) # 1.0 2.0
foo(**v1) # 1.0 2.0
ΠΠ΅ΠΊΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π°Π΄ΡΠ²Π°ΡΡ/ΡΠΌΠ½ΠΎΠΆΠ°ΡΡ/Π²ΡΡΠΈΡΠ°ΡΡ/Π΄Π΅Π»ΠΈΡΡ/ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ/ΠΈ Ρ.ΠΏ. Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ, ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ/ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΌΠΈ/numpy-ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ:
v1 = Vec2(1,2)
v2 = -v1*10 + 20
print(v2 == (10,0)) # True
v1 += 3
print(v1 != [4,5]) # False
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
v1 = Vec2(1,2)
v2 = Vec2(3,4)
print(v1.dot(v2)) # 11.0 - ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
print(v1*v2)) # 11.0 - ΡΠΎΠΆΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
print(v1.cross(v2)) # -2.0 - Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
print(v1 & v2) # -2.0 - ΡΠΎΠΆΠ΅ Π²Π΅ΠΊΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
print(v1.norm()) # (0.45, 0.89) - Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ
print(v1.norm().len()) # 1.0 - Π΄Π»ΠΈΠ½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°
print(v1.rotate(3.14/2)) # (-2.00, 1.00) - ΠΏΠΎΠ²ΠΎΡΠΎΡ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ²
print(v1.rotate(90, degrees=True)) # (-2.00, 1.00) - ΠΏΠΎΠ²ΠΎΡΠΎΡ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΡΠΎΠΆΠ΅
print(v1.angle_to(v2, degrees=True)) # -10.30... ΡΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ
Mat2
ΠΠ°ΡΡΠΈΡΠ° 2Ρ
2 ΠΠ»Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΡΡ 2Ρ
2. Π‘Π»ΡΠΆΠΈΡ Π΄Π»Ρ Π°ΡΠΈΠ½Π½ΡΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π²Π΅ΠΊΡΠΎΡΠΎΠ² Vec2
ΠΠΎΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²: ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ
from easyvec import Mat2
m1 = Mat2(1,2,3,4)
m2 = Mat2((1,2),(3,4))
m3 = Mat2(Vec2(1,2), Vec2(3,4))
m4 = Mat2(Vec2(1,2),(3,4))
m5 = Mat2(-1,-2,-3,-4) + 2 * Mat2(1,2,3,4)
m6 = Mat2([[1.0, 2.0], [3.0, 4.0]])
# Π²ΡΠ΅ ΡΡΠΈ ΠΌΠ°ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ ΠΈ ΡΠ°Π²Π½Ρ Mat2([[1.0, 2.0], [3.0, 4.0]])
ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
mat = Mat2(1,2,3,4)
print(mat) # [[1.00, 2.00], [3.00, 4.00]]
print(repr(mat)) # Mat2([[1.0, 2.0], [3.0, 4.0]])
print(mat.m11, mat.m12, mat.m21, mat.m22) # 1.0 2.0 3.0 4.0
print(mat['m11'], mat['m12'], mat['m21'], mat['m22']) # 1.0 2.0 3.0 4.0
print(mat[0][1], mat[0][1], mat[1][0], mat[1][1]) # 1.0 2.0 3.0 4.0
print(mat[0,1], mat[0,1], mat[1,0], mat[1,1]) # 1.0 2.0 3.0 4.0
print(mat.T) # [[1.00, 3.00], [2.00, 4.00]] - ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ°
print(mat.det()) # ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΌΠ°ΡΡΠΈΡΡ
print(mat._1 * mat == Mat2.eye()) # True - ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΠΏΠΎΠΌΠ½ΠΎΠΆΠ΅Π½Π½Π°Ρ Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ ΡΠ°Π²Π½ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ
Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°:
from easyvec import Mat2, Vec2
m = Mat2.from_angle(90, degrees=True)
v = Vec2(1,2)
# ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Π²Π΅ΠΊΡΠΎΡΡ (ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ)
print(m * v) # (2.00, -1.00)
print(m * (1,2)) # (2.00, -1.00)
Rect
ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π°ΠΌΠΈ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΎΡΡΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ 4 ΠΏΠΎΠ»Ρ Ρ float ΡΠΈΡΠ»Π°ΠΌΠΈ: x1, y1, x2, y2. ΠΡΠΈΡΠ΅ΠΌ ΡΠΎΡΠΊΠ° (x1, y1) - Π½ΠΈΠΆΠ½ΡΡ-Π»Π΅Π²Π°Ρ, (x2, y2) - Π²Π΅ΡΡ Π½ΡΡ ΠΏΡΠ°Π²Π°Ρ
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ:
from easyvec import Rect, Vec2
r1 = Rect(1, 2, 3, 4)
r2 = Rect([1, 2], [3, 4])
r3 = Rect([1,2,3,4])
r4 = Rect(Vec2(1,2), Vec2(3,4))
r5 = Rect.from_dict({'x1': 1, 'y1': 2, 'x2': 3, 'x3': 4})
# Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ ΠΈ ΡΠ°Π²Π½Ρ Rect(1.00, 2.00, 3.00, 4.00)
Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ:
# Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΠΎΠΊΡΡΠ³ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΎΡΠ΅ΠΊ
r1 = Rect.bbox((1,2), (3,4), (1.5, 3))
r2 = Rect.bbox(Vec2(1,2), Vec2(3,4), Vec2(1.5, 3))
r3 = Rect.bbox([(1,4), Vec2(3,4), (1.5, 2)])
# Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ ΠΈ ΡΠ°Π²Π½Ρ Rect(1.00, 2.00, 3.00, 4.00)
ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
r = Rect(1,2,3,4)
print(r) # Rect(1.00, 2.00, 3.00, 4.00)
print(repr(r)) # Rect(1.00, 2.00, 3.00, 4.00)
print(r.x1, r.y1, r.x2, r.y2) # 1.0 2.0 3.0 4.0
print(r['x1'], r['y1'], r['x2'], r['y2']) # 1.0 2.0 3.0 4.0
print(r[0], r[1], r[2], r[3]) # 1.0 2.0 3.0 4.0
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ/ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ:
r1 = Rect(1,2,3,4)
r2 = Rect(2,3,4,5)
r3 = Rect(10,20,30,40)
print(r1.is_intersect_rect(r2)) # True - ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Π»ΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ
print(r1 * r2) # Rect(2.00, 3.00, 3.00, 4.00) - ΠΎΠ±ΡΠΈΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
print(r1 + r2) # Rect(1.00, 2.00, 4.00, 5.00) - ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
print(r1.is_intersect_rect(r3)) # False
print(r1 * r3) # Rect(0.00, 0.00, 0.00, 0.00)
print((r1 * r3).is_null()) # True
print(r1 + r3) # ect(1.00, 2.00, 30.00, 40.00)
Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
r1 = Rect(1,2,3,4)
r2 = Rect(2,3,4,5)
print(r1.area()) # 4.0 ΠΠ»ΠΎΡΠ°Π΄Ρ
print(r1.perimeter()) # 8.0 ΠΠ΅ΡΠΈΠΌΠ΅ΡΡ
p1 = Vec2(0,0)
p2 = (2, 3)
print(r1.intersect(r2) ) # Rect(2.00, 3.00, 3.00, 4.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²
print(r1.intersect((p1,p2)) ) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c ΠΎΡΡΠ΅Π·ΠΊΠΎΠΌ (p1,p2)
print(r1.intersect(p1,p2) ) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c ΠΎΡΡΠ΅Π·ΠΊΠΎΠΌ (p1,p2)
print(r1.intersect((p1,p2))) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c ΠΎΡΡΠ΅Π·ΠΊΠΎΠΌ (p1,p2)
print(r1.intersect(s=(p1,p2))) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c ΠΎΡΡΠ΅Π·ΠΊΠΎΠΌ (p1,p2)
print(r1.intersect(r=(p1,p2)) ) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c Π»ΡΡΠΎΠΌ (p1,p2)
print(r1.intersect(line=(p1,p2)) ) # (1.33, 2.00) ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ c Π»ΠΈΠ½ΠΈΠ΅ΠΉ (p1,p2)
PolyLine
ΠΠΎΠ»ΠΈΠ³ΠΎΠ½/ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½ΠΈΡ Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ 3 ΠΏΠΎΠ»Ρ:
- vecs -
list[Vec2]
- ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΡΠΎΡΠ΅ΠΊ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° - enclosed -
[bool]
- ΡΠ»Π°Π³, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½ΠΈΡ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠΉ - bbox -
Rect
- ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΠΎΠΊΡΡΠ³ ΡΠΎΡΠ΅ΠΊ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ:
from easyvec import PolyLine
pg1 = PolyLine([(1,2), (3,4), (2,5)])
pg2 = PolyLine([(1,2), (3,4), (2,5)], enclosed=True)
pg3 = PolyLine([Vec2(1,2), Vec2(3,4), Vec2(2,5)], copy_data=False)
pg4 = PolyLine.from_dict({'vecs': [{'x': 1, 'y': 2}, {'x':3, 'y':4}, {'x': 2, 'y': 5}], 'enclosed': False})
ΠΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
ΠΈΠΌΡ | ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ |
---|---|
copy() |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° |
clone() |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° |
to_dict |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ |
is_in(self, Vec2 point) |
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΡΠΎΡΠΊΠ° Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° |
transform(self, Mat2 m) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΡΠΎΡΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Ρ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ Mat2 m |
add_vec(self, Vec2 v) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΡΠΎΡΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Π½Π° Π²Π΅ΠΊΡΠΎΡ v |
get_area(self, bint always_positive=True) |
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° |
get_center_mass(self) |
ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ.ΠΌ. ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π° (ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΡΡΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΏΠΎ ΠΏΠΎΠ»ΡΠ°Π΄ΠΈ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡΡ) |
get_Iz(self, Vec2 z_point) |
ΠΠΎΠ»ΡΡΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ½Π΅ΡΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈ, ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· z_point ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠΏΠ΅Π½Π΄ΠΈΠΊΡΠ»ΡΡΠ½ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ xy (ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΡΡΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΏΠΎ ΠΏΠΎΠ»ΡΠ°Π΄ΠΈ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΌΠ°ΡΡΠΎΠΉ = 1) |
is_selfintersect(self) |
ΠΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅Ρ Π»ΠΈ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΡΠ°ΠΌ ΡΠ΅Π±Ρ |
intersect_line(self, Vec2 p1, Vec2 p2, bint sortreduce=True) |
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΈ Π»ΠΈΠ½ΠΈΠΈ. sortreduce - Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ p1 |
intersect_ray(self, Vec2 p1, Vec2 p2, bint sortreduce=True) |
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΈ Π»ΡΡΠ°. sortreduce - Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ p1 |
intersect_segment(self, Vec2 p1, Vec2 p2, bint sortreduce=True) |
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΈ ΠΎΡΡΠ΅Π·ΠΊΠ°. sortreduce - Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ p1 |
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
from easyvec.geometry import intersect, closest, normalize_angle2pi, angle_between
# Ρ Π²ΡΠ΅Ρ
ΡΡΠ½ΠΊΡΠΈΠΉ Π΅ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
print(intersect.__doc__)
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π²ΡΡ
ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (ΠΈΠ»ΠΈ None, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ).
# Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ, Π»ΡΡΠΈ, ΠΎΡΡΠ΅Π·ΠΊΠΈ, Π΄ΡΠ³ΠΈ.
# Π‘ΡΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ (ΠΊΡΠΎΠΌΠ΅ Π΄ΡΠ³, ΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ΅Π½ΡΡΠΎΠΌ, ΡΠ°Π΄ΠΈΡΡΠΎΠΌ, ΠΈ Π΄Π²ΡΠΌΡ ΡΠ³Π»Π°ΠΌΠΈ).
# Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ° Π½Π΅Π»ΡΠ·Ρ Π½Π°ΠΉΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
Π΄ΡΠ³(
# ΠΡΡΠ΅Π·ΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - Π΄Π²ΡΠΌΡ ΠΊΡΠ°ΠΉΠ½ΠΈΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΎΡΡΠ΅Π·ΠΊΠ°. Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'segment', 's', 'segment1', 's1', 'segment2', 's2',
# ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ, ΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ².
# ΠΡΡΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - ΡΠΎΡΠΊΠΎΠΉ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΡΡ, ΠΈ ΡΠΎΡΠΊΠΎΠΉ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ.
# Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'ray', 'r', 'ray1', 'r1', 'ray2', 'r2'
# ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π»ΠΈΠ½ΠΈΡ.
# Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'line', 'l', 'line1', 'l1', 'line2', 'l2'
# ΠΡΠ³Π° Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (ctnter, r, angle_from, angle_to) - ΡΠ΅Π½ΡΡΠΎΠΌ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ Π΄ΡΠ³ΠΈ, ΡΠ°Π΄ΠΈΡΡΠΎΠΌ, Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠ³Π»ΠΎΠΌ.
# Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'arc', 'a'
# ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
# >>> p_intersect = intersect(p1, p2, p3, p4) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, s=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, segment=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, s2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(s=(p1, p2), s2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(s1=(p1, p2), s2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(s=(p1, p2), segment=(p3, p4))# p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΠΎΡΡΠ΅Π·ΠΊΠΎΠ² (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, ray=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΡΡΠ° (p3, p4)
# >>> p_intersect = intersect(p1, p2, r=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΡΡΠ° (p3, p4)
# >>> p_intersect = intersect(p1, p2, ray2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΡΡΠ° (p3, p4)
# >>> p_intersect = intersect(r1=(p1, p2), r2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
Π»ΡΡΠ΅ΠΉ (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(r1=(p1, p2), ray2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
Π»ΡΡΠ΅ΠΉ (p1, p2) ΠΈ (p3, p4)
# >>> p_intersect = intersect(s=(p1, p2), ray2=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΡΡΠ° (p3, p4)
# >>> p_intersect = intersect(p1, p2, line=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΠΈΠ½ΠΈΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, l=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΠΈΠ½ΠΈΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, l1=(p3, p4)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π»ΠΈΠ½ΠΈΠΈ (p3, p4)
# >>> p_intersect = intersect(p1, p2, a=(p3, r, a1, a2)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π΄ΡΠ³ΠΈ (p3, r, a1, a2)
# >>> p_intersect = intersect(p1, p2, arc=(p3, r, a1, a2)) # p_intersect Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ΅Π·ΠΊΠ° (p1, p2) ΠΈ Π΄ΡΠ³ΠΈ (p3, r, a1, a2)
# ΠΈ Ρ.Π΄.
# Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ p1, p2, p3, p4 ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Vec2, ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΡΠΏΠΈΡΠΊΠΈ, ΠΌΠ°ΡΡΠΈΠ²Ρ.... ΠΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ [0] ΠΈ [1], Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΠ»Π°
print(closest.__doc__)
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±Π»ΠΈΠΆΠ°ΠΉΡΡΡ ΡΠΎΡΠΊΡ Π½Π° ΡΡΡΠ½ΠΎΡΡΠΈ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅
# Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ, Π»ΡΡΠΈ, ΠΎΡΡΠ΅Π·ΠΊΠΈ.
# Π‘ΡΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ
# ΠΡΡΠ΅Π·ΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - Π΄Π²ΡΠΌΡ ΠΊΡΠ°ΠΉΠ½ΠΈΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΎΡΡΠ΅Π·ΠΊΠ°. Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'segment', 's', 'segment1', 's1', 'segment2', 's2',
# ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ, ΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΎΡΡΠ΅Π·ΠΊΠΎΠ².
# ΠΡΡΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - ΡΠΎΡΠΊΠΎΠΉ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΡΡ, ΠΈ ΡΠΎΡΠΊΠΎΠΉ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ.
# Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'ray', 'r', 'ray1', 'r1', 'ray2', 'r2'
# ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΌ (p1, p2) - Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π»ΠΈΠ½ΠΈΡ.
# Π ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'line', 'l', 'line1', 'l1', 'line2', 'l2'
# ΠΠ°Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π°Π½ΡΠΈΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
# 'point', 'p'
# ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
# >>> p_nearest = closest(p1, p2, p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΡ (p1, p2)
# >>> p_nearest = closest(p1, p2, p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΡ (p1, p2)
# >>> p_nearest = closest(p1, p2, point=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΡ (p1, p2)
# >>> p_nearest = closest(s=(p1, p2), p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΡ (p1, p2)
# >>> p_nearest = closest(segment=(p1, p2), p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΡΡΠ΅Π·ΠΊΡ (p1, p2)
# >>> p_nearest = closest(r=(p1, p2), p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΡΡΡ (p1, p2)
# >>> p_nearest = closest(ray=(p1, p2), p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΡΡΡ (p1, p2)
# >>> p_nearest = closest(line=(p1, p2), p=p) # p_nearest Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΊ ΡΠΎΡΠΊΠ΅ "p", ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΠΈΠ½ΠΈΠΈ (p1, p2)
# ΠΈ Ρ.Π΄.
# Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ p1, p2, p ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Vec2, ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΡΠΏΠΈΡΠΊΠΈ, ΠΌΠ°ΡΡΠΈΠ²Ρ.... ΠΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ [0] ΠΈ [1], Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΠ»Π°
print(normalize_angle2pi.__doc__)
# ΠΠΎΡΠΌΠ°Π»ΠΈΠ·Π²ΡΡ ΡΠ³ΠΎΠ». ΠΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ ΠΊ Π²ΠΈΠ΄Ρ 0 <= angle <= 2*pi
print(angle_between.__doc__)
# ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π»Π΅ΠΆΠΈΡ Π»ΠΈ Π»ΡΡ, Π²ΡΡ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΈΠ· Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΠΎΠ΄ ΡΠ³Π»ΠΎΠΌ mid, Π²Π½ΡΡΡΠΈ ΡΠ³Π»Π°, ΠΎΠ±ΡΠ°Π·Π°Π²Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π²ΡΠΌΡ Π»ΡΡΠ°ΠΌΠΈ,
# Π²ΡΡ
ΠΎΠ΄ΡΡΠΈΠΌΠΈ ΠΈΠ· Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΠΎΠ΄ ΡΠ³Π»Π°ΠΌΠΈ start ΠΈ end. ΠΠ±Π»Π°ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ³Π»Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π»ΡΡΠ° start Π΄ΠΎ Π»ΡΡΠ° end ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ