Updated
This commit is contained in:
57
Scripts/Modeling/Edit/gs_curvetools/utils/gs_math.py
Normal file
57
Scripts/Modeling/Edit/gs_curvetools/utils/gs_math.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""
|
||||
|
||||
License:
|
||||
This collection of code named GS CurveTools is a property of George Sladkovsky (Yehor Sladkovskyi)
|
||||
and can not be copied or distributed without his written permission.
|
||||
|
||||
GS CurveTools v1.3.1 Studio
|
||||
Copyright 2023, George Sladkovsky (Yehor Sladkovskyi)
|
||||
All Rights Reserved
|
||||
|
||||
Autodesk Maya is a property of Autodesk, Inc.
|
||||
|
||||
Social Media and Contact Links:
|
||||
|
||||
Discord Server: https://discord.gg/f4DH6HQ
|
||||
Online Store: https://sladkovsky3d.artstation.com/store
|
||||
Online Documentation: https://gs-curvetools.readthedocs.io/
|
||||
Twitch Channel: https://www.twitch.tv/videonomad
|
||||
YouTube Channel: https://www.youtube.com/c/GeorgeSladkovsky
|
||||
ArtStation Portfolio: https://www.artstation.com/sladkovsky3d
|
||||
Contact Email: george.sladkovsky@gmail.com
|
||||
|
||||
"""
|
||||
|
||||
from Qt import QtGui
|
||||
|
||||
def lerp(x, y0, y1, x0=0, x1=1):
|
||||
""" Returns the value between y0 and y1 based on x in range of x0 and x1
|
||||
|
||||
https://en.wikipedia.org/wiki/Linear_interpolation"""
|
||||
return float((y0 * (x1 - x) + y1 * (x - x0)) / (x1 - x0))
|
||||
|
||||
def quad(y1, y2, y3, fPoint, x1=0, x2=0.5, x3=1):
|
||||
""" Takes three points (y1, y2, y3) and returns a point on computed curve with fPoint """
|
||||
A = (x2 * (y1 - y3) + x3 * (y2 - y1)) / ((x1 - x2) * (x1 - x3) * (x2 - x3))
|
||||
B = (y2 - y1) / (x2 - x1) - A * (x1 + x2)
|
||||
C = y1
|
||||
return (A * (fPoint**2)) + (B * fPoint) + C
|
||||
|
||||
def dot(v1, v2):
|
||||
""" Dot product of two QVector2D """
|
||||
return QtGui.QVector2D.dotProduct(v1, v2)
|
||||
|
||||
def projectPoint(A, B, P):
|
||||
""" Project a point P onto a line made of two points A and B """
|
||||
A = QtGui.QVector2D(A)
|
||||
B = QtGui.QVector2D(B)
|
||||
P = QtGui.QVector2D(P)
|
||||
AP = A - P
|
||||
AB = A - B
|
||||
return (A - dot(AP, AB) / dot(AB, AB) * AB).toPointF()
|
||||
|
||||
def angleDiff(a1, a2):
|
||||
""" Find an absolute angle difference within 360 degrees"""
|
||||
a1 = a1 % 360
|
||||
a2 = a2 % 360
|
||||
return abs(a1) - abs(a2)
|
Reference in New Issue
Block a user