react-native-redash
Version:
Utility library for React Native Reanimated
2 lines • 2.88 kB
JavaScript
import Animated from"react-native-reanimated";import{find}from"../Array";import{acos,approximates}from"../Math";var Value=Animated.Value,and=Animated.and,cond=Animated.cond,divide=Animated.divide,add=Animated.add,multiply=Animated.multiply,block=Animated.block,greaterThan=Animated.greaterThan,eq=Animated.eq,lessThan=Animated.lessThan,pow=Animated.pow,sqrt=Animated.sqrt,set=Animated.set,sub=Animated.sub,cos=Animated.cos,not=Animated.not;var isRootValidForCubicBezier=function isRootValidForCubicBezier(root){return and(greaterThan(root,0),lessThan(root,1));};var cuberoot=function cuberoot(v){return cond(lessThan(v,0),multiply(pow(multiply(v,-1),1/3),-1),pow(v,1/3));};var cubicBezierSolve=function cubicBezierSolve(pa,pb,pc,pd){var a=new Value();var b=new Value();var c=new Value();var d=new Value();var root1=new Value();var root2=new Value();var root3=new Value();var q=new Value();var q2=new Value();var p=new Value();var p3=new Value();var discriminant=new Value();var mp3=new Value();var mp33=new Value();var r=new Value();var t=new Value();var cosphi=new Value();var phi=new Value();var crtr=new Value();var t1=new Value();var u1=new Value();var sd=new Value();var v1=new Value();var sq=new Value();return block([set(a,add(multiply(3,pa),multiply(-6,pb),multiply(3,pc))),set(b,add(multiply(-3,pa),multiply(3,pb))),set(c,pa),set(d,add(multiply(-1,pa),multiply(3,pb),multiply(-3,pc),pd)),cond(approximates(d,0),cond(approximates(d,0),cond(not(approximates(b,0)),set(root1,divide(multiply(-1,c),b)),[set(q,sqrt(sub(pow(b,2),multiply(4,a,c)))),set(root1,divide(sub(q,b),multiply(2,a))),set(root2,divide(sub(multiply(b,-1),q),multiply(2,a)))])),[set(a,divide(a,d)),set(b,divide(b,d)),set(c,divide(c,d)),set(p,divide(sub(multiply(3,b),multiply(a,a)),3)),set(p3,divide(p,3)),set(q,divide(add(multiply(2,a,a,a),multiply(-9,a,b),multiply(27,c)),27)),set(q2,divide(q,2)),set(discriminant,add(multiply(q2,q2),multiply(p3,p3,p3))),cond(lessThan(discriminant,0),[set(mp3,divide(multiply(p,-1),3)),set(mp33,multiply(mp3,mp3,mp3)),set(r,sqrt(mp33)),set(t,divide(multiply(q,-1),multiply(2,r))),set(cosphi,cond(lessThan(t,-1),-1,cond(greaterThan(t,1),1,t))),set(phi,acos(cosphi)),set(crtr,cuberoot(r)),set(t1,multiply(2,crtr)),set(root1,sub(multiply(t1,cos(divide(phi,3))),divide(a,3))),set(root2,sub(multiply(t1,cos(divide(add(phi,2*Math.PI),3))),divide(a,3))),set(root3,sub(multiply(t1,cos(divide(add(phi,4*Math.PI),3))),divide(a,3)))],cond(eq(discriminant,0),[set(u1,cond(lessThan(q2,0),cuberoot(multiply(q2,-1)),multiply(cuberoot(q2),-1))),set(root1,sub(multiply(2,u1),divide(a,3))),set(root2,sub(multiply(-1,u1),divide(a,3)))],[set(sd,sqrt(discriminant)),set(u1,cuberoot(sub(sq,q2))),set(v1,cuberoot(add(sq,q2))),set(root1,sub(u1,v1,divide(a,3)))]))]),find([root1,root2,root3],isRootValidForCubicBezier)]);};export default cubicBezierSolve;
//# sourceMappingURL=CubicBezierSolve.js.map