JSFiddle - React, Tailwind, and code Playground

by bgrins

JavaScript

Gradient.prototype.angleToGradientVector = function(ang) {
        
    function pointOfAngle(a) {
        return {x:Math.cos(a),
                y:Math.sin(a)};
    }
    function radiansToDegrees(r) {
        return (r*180)/Math.PI;
    }
    function degreesToRadians(d) {
        return (d*Math.PI)/180;
    }
    
    var inputAngle = this.getAngle();
    
    var eps = Math.pow(2, -52);
    var angle = (inputAngle % 360);
    var startPoint = pointOfAngle(degreesToRadians(180-angle));
    var endPoint = pointOfAngle(degreesToRadians(360-angle));
    
    if(startPoint.x <= 0 || Math.abs(startPoint.x) <= eps) {
        startPoint.x = 0;
    } 
    else { 
        if ((angle > 90 && angle < 180) || (angle >270 && angle < 360)) {
            startPoint.x = parseFloat(startPoint.x+.30); 
        }
    }
    
    if (startPoint.y <= 0 || Math.abs(startPoint.y) <= eps) {
        startPoint.y = 0;
    } 
    else { 
        if ((angle > 90 && angle < 180) || (angle >270 && angle < 360)) {
            startPoint.y = parseFloat(startPoint.y+.30); 
        }
    }
    
    if (endPoint.x <= 0 || Math.abs(endPoint.x) <= eps) {
        endPoint.x = 0;
    } 
    else { 
        if ((angle > 90 && angle < 180) || (angle >270 && angle < 360)) {
            endPoint.x = parseFloat(endPoint.x+.30); 
        }
    }
    if (endPoint.y <= 0 || Math.abs(endPoint.y) <= eps) {
        endPoint.y = 0;
    } 
    else { 
        if ((angle > 90 && angle < 180) || (angle >270 && angle < 360)) {
            endPoint.y = parseFloat(endPoint.y+.30);
        }
    }
    
    return {
        x1: parseInt(startPoint.x * 100 ),
        y1: parseInt(startPoint.y * 100 ),
        x2: parseInt(endPoint.x * 100),
        y2: parseInt(endPoint.y * 100)
    }
}