geometry.py

changeset 15
45b3aeb25003
parent 14
d383f319f35b
child 22
9bb00170780b
equal deleted inserted replaced
14:d383f319f35b 15:45b3aeb25003
369 https://math.stackexchange.com/a/476311 369 https://math.stackexchange.com/a/476311
370 ''' 370 '''
371 v1, v2, v3 = polygon.vertices[:3] 371 v1, v2, v3 = polygon.vertices[:3]
372 a, b = v3 - v2, v1 - v2 372 a, b = v3 - v2, v1 - v2
373 normal = cross_product(a, b).normalized() 373 normal = cross_product(a, b).normalized()
374 v = cross_product(normal, Vector(0, 0, 1))
375 cosine = dot_product(normal, Vector(0, 0, 1))
376 v_matrix = Matrix3x3([ 374 v_matrix = Matrix3x3([
377 0, -v.z, v.y, 375 0, 0, -normal.x,
378 v.z, 0, -v.x, 376 0, 0, -normal.y,
379 -v.y, v.x, 0, 377 normal.x, normal.y, 0,
380 ]) 378 ])
381 try: 379 try:
382 rotation_matrix = Matrix3x3() 380 rotation_matrix = Matrix3x3()
383 rotation_matrix += v_matrix 381 rotation_matrix += v_matrix
384 rotation_matrix += (v_matrix @ v_matrix) * (1 / (1 + cosine)) 382 rotation_matrix += (v_matrix @ v_matrix) * (1 / (1 + normal.z))
385 except ZeroDivisionError: 383 except ZeroDivisionError:
386 rotation_matrix = Matrix3x3() 384 rotation_matrix = Matrix3x3()
387 full_matrix = complete_matrix(rotation_matrix, Vertex(0, 0, 0)) 385 full_matrix = complete_matrix(rotation_matrix, Vertex(0, 0, 0))
388 return Polygon([ 386 return Polygon([
389 transform(vertex = vertex, transformation_matrix = full_matrix) 387 transform(vertex = vertex, transformation_matrix = full_matrix)

mercurial