86 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // hacky stuff for 4d rotations
 | |
| 
 | |
| // see https://math.stackexchange.com/questions/1402362/can-rotations-in-4d-be-given-an-explicit-matrix-form#1402376
 | |
| 
 | |
| import * as THREE from 'three';
 | |
| 
 | |
| 
 | |
| function rotZW(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		ctheta, -stheta, 0, 0,
 | |
| 		stheta, ctheta, 0, 0,
 | |
| 		0, 0, 1, 0,
 | |
| 		0, 0, 0, 1
 | |
| 		);
 | |
| }
 | |
| 
 | |
| function rotYW(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		ctheta, 0, -stheta, 0,
 | |
| 		0, 1, 0, 0,
 | |
| 		stheta, 0, ctheta, 0,
 | |
| 		0, 0, 0, 1,
 | |
| 		);
 | |
| }
 | |
| 
 | |
| function rotYZ(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		ctheta, 0, 0, -stheta,
 | |
| 		0, 1, 0, 0,
 | |
| 		0, 0, 1, 0,
 | |
| 		stheta, 0, 0, ctheta, 
 | |
| 		);
 | |
| }
 | |
| 
 | |
| function rotXW(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		1, 0, 0, 0,
 | |
| 		0, ctheta, -stheta, 0,
 | |
| 		0, stheta, ctheta, 0,
 | |
| 		0, 0, 0, 1
 | |
| 		);
 | |
| }
 | |
| 
 | |
| function rotXZ(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		1, 0, 0, 0,
 | |
| 		0, ctheta, 0, -stheta,
 | |
| 		0, 0, 1, 0,
 | |
| 		0, stheta, 0, ctheta,
 | |
| 		);
 | |
| }
 | |
| 
 | |
| function rotXY(theta) {
 | |
| 	const ctheta = Math.cos(theta);
 | |
| 	const stheta = Math.sin(theta);
 | |
| 	return new THREE.Matrix4(
 | |
| 		1, 0, 0, 0,
 | |
| 		0, 1, 0, 0,
 | |
| 		0, 0, ctheta, -stheta,
 | |
| 		0, 0, stheta, ctheta,
 | |
| 		);
 | |
| }
 | |
| 
 | |
| 
 | |
| export const rotfn = {
 | |
| 	XY: rotXY,
 | |
| 	XZ: rotXZ,
 | |
| 	XW: rotXW,
 | |
| 	YZ: rotYZ,
 | |
| 	YW: rotYW,
 | |
| 	ZW: rotZW,
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 |