JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="myCanvas"></canvas>

JavaScript

var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
canvas.width=800;
canvas.height=600;
var canvasData=context.getImageData(0, 0, canvas.width, canvas.height);

var angls=[["45","210"]];
//var angls=[[45,180],[45,180],[45,180],[45,180]];
//var angls=[[45,c],[-45,c]];
var massiv=sfera(angls);

droveLines(canvas, 0, 0, massiv);
canvas.addEventListener('mousemove', function(evt){
		var mousePos=getMousePos(canvas, evt);
		droveLines(canvas, mousePos.x, mousePos.y, massiv);
	}, false);


function rotate(v, p, cos, sin, mcos){
	var x=v[0], y=v[1], z=v[2]; // вектор, вокруг которого вращаем
	var xp=p[0], yp=p[1], zp=p[2]; // точка, которую вращаем
	
	var a11=(mcos*x*x+cos), a12=(mcos*x*y-sin*z), a13=(mcos*x*z+sin*y); // матрица поворота вокруг вектора
	var a21=(mcos*x*y+sin*z), a22=(mcos*y*y+cos), a23=(mcos*z*y-sin*x);
	var a31=(mcos*x*z-sin*y), a32=(mcos*z*y+sin*x), a33=(mcos*z*z+cos);
	
	var xx=xp*a11+yp*a12+zp*a13; // умножаем точку на матрицу
	var yy=xp*a21+yp*a22+zp*a23;
	var zz=xp*a31+yp*a32+zp*a33;
	
	return [xx, yy, zz];
}

function find_point(a, b, c, angls){
	var alfa=angls[0]*Math.PI/180, betta=angls[1]*Math.PI/180;
	var x1=a[0], y1=a[1], z1=a[2]; //A
	var x2=b[0], y2=b[1]; z2=b[2]; //B - ось вращения AB
	var x3=c[0], y3=c[1], z3=c[2]; //C - третья точка нужна для задания плоскости
	var xa=x2-x1, ya=y2-y1, za=z2-z1; // вектор AB
	var xc=x3-x1, yc=y3-y1, zc=z3-z1; // вектор AC
	var xv=(ya*zc-za*yc), yv=-(xa*zc-za*xc), zv=(xa*yc-ya*xc); // векторное произведение векторов AB и AC (получаем вектор-перпиндикуляр к плоскости)
	var cosa=Math.cos(alfa); // всю тригонометрию из матрицы поворота считаем заранее (оптимизация)
	var sina=Math.sin(alfa);
	var mcosa=1-Math.cos(alfa);
	var cosb=Math.cos(betta);
	var sinb=Math.sin(betta);
	var mcosb=1-Math.cos(betta);
	var r=Math.sqrt(Math.pow(xv,2)+Math.pow(yv,2)+Math.pow(zv,2)); // длина вектора-перпиндикуляра
	var vector=[xv/r, yv/r, zv/r]; // нормированный вектор
	var point=[xa, ya, za];...