You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
5.3 KiB
215 lines
5.3 KiB
10 years ago
|
function app1(p,a,c1,c2){
|
||
|
var l = Math.cos(a)*p[c1]+Math.sin(a)*p[c2]
|
||
|
var k = -Math.sin(a)*p[c1]+Math.cos(a)*p[c2]
|
||
|
p[c1] = l
|
||
|
p[c2] = k
|
||
|
}
|
||
|
|
||
|
function app2(p,a,c1,c2){
|
||
|
var l = Math.cos(a)*p[c1]-Math.sin(a)*p[c2]
|
||
|
var k = Math.sin(a)*p[c1]+Math.cos(a)*p[c2]
|
||
|
p[c1] = l
|
||
|
p[c2] = k
|
||
|
}
|
||
|
|
||
|
var _edges
|
||
|
function tesseractedges(){
|
||
|
if(!_edges){
|
||
|
var m = tesseractwithrotation(0,0,0,0,0,0)
|
||
|
var edges = []
|
||
|
var indicies = ['x','y','z','w']
|
||
|
for (var i = 0; i < m.length; i++) {
|
||
|
for (var j = i+1; j < m.length; j++) {
|
||
|
var count = 0
|
||
|
for (var k = 0; k < 4; k++) {
|
||
|
if (m[i][indicies[k]] === m[j][indicies[k]]) count++
|
||
|
};
|
||
|
if (count === 3) edges.push([i,j])
|
||
|
}
|
||
|
}
|
||
|
_edges = edges
|
||
|
}
|
||
|
return _edges
|
||
|
}
|
||
|
|
||
|
function tesseractwithrotation(a,b,c,d,e,f) {
|
||
|
var verticies = []
|
||
|
for (var i = 0; i < 16; i++) {
|
||
|
var p = {
|
||
|
x: (i&1)*2 - 1,
|
||
|
y: ((i>>1)&1)*2 - 1,
|
||
|
z: ((i>>2)&1)*2 - 1,
|
||
|
w: ((i>>3)&1)*2 - 1
|
||
|
}
|
||
|
app1(p,a,'x','y')
|
||
|
app1(p,b,'y','z')
|
||
|
app1(p,c,'x','w')
|
||
|
app2(p,d,'x','z')
|
||
|
app2(p,e,'y','w')
|
||
|
app2(p,f,'z','w')
|
||
|
verticies.push(p)
|
||
|
}
|
||
|
return verticies
|
||
|
}
|
||
|
|
||
|
function project(point, size){
|
||
|
return {
|
||
|
x: (point.x+Math.SQRT2*point.z)*size,
|
||
|
y: (point.y+Math.SQRT2*point.w)*size
|
||
|
}
|
||
|
}
|
||
|
|
||
10 years ago
|
// (function(){
|
||
|
|
||
|
// var color = "rgb(255,133,0)"
|
||
|
// var color = "rgb(55,110,79)"
|
||
|
var color="white"
|
||
|
|
||
|
// var color = "rgb(255,221,21)"
|
||
|
// var color = '#'+(16777216+Math.floor(Math.random()*16777215)).toString(16).slice(1)
|
||
|
// document.styleSheets[0].insertRule("a {color: "+color+"}",0)
|
||
|
|
||
|
var lasttime,
|
||
|
canvas = document.getElementById('canvas'),
|
||
|
ctx = canvas.getContext('2d');
|
||
|
|
||
|
// canvas.style['background-color'] = color;
|
||
|
|
||
|
var logo = new Image(), logo_small = new Image()
|
||
|
logo.src = 'img/logo.png'
|
||
|
logo_small.src = 'img/logo.png'
|
||
|
|
||
|
|
||
|
// var pixelRatio = (function(context) {
|
||
|
// var backingStore = context.backingStorePixelRatio ||
|
||
|
// context.webkitBackingStorePixelRatio ||
|
||
|
// context.mozBackingStorePixelRatio ||
|
||
|
// context.msBackingStorePixelRatio ||
|
||
|
// context.oBackingStorePixelRatio ||
|
||
|
// context.backingStorePixelRatio || 1;
|
||
|
|
||
|
// return (window.devicePixelRatio || 1) / backingStore;
|
||
|
// })(ctx);
|
||
|
|
||
|
|
||
|
|
||
10 years ago
|
|
||
|
function init () {
|
||
|
fixdim()
|
||
|
lasttime = new Date().getTime()
|
||
|
requestAnimationFrame(main)
|
||
|
}
|
||
|
|
||
|
function fixdim() {
|
||
10 years ago
|
dimensions.update()
|
||
|
|
||
|
var displaywidth = Math.sqrt(dimensions.width)*18//dimensions.width > 900 ? 900 : 450
|
||
|
|
||
|
var doc = document.documentElement;
|
||
|
var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
||
|
var header = document.querySelector('.stickyheader')
|
||
|
|
||
|
document.getElementById('logo').style.top = top /2
|
||
|
var rect = document.querySelector('.marterial').getBoundingClientRect()
|
||
|
var bottom = rect.top + rect.height
|
||
|
|
||
|
// console.log(bottom)
|
||
|
// if(bottom < 100){
|
||
|
// document.getElementById('logo').style.left = bottom - 100
|
||
|
// }
|
||
|
var fadestart = Math.min(rect.height/2, 100)
|
||
|
|
||
|
header.style['background-color'] = 'rgba(0, 219, 157,'+Math.max(Math.min((-bottom+fadestart),1),0)+')'
|
||
|
header.querySelector('.smalllogo').style.opacity = Math.max(Math.min((-bottom+fadestart)*2/fadestart,1),0)
|
||
|
document.getElementById('logo').style.opacity = Math.max(Math.min((bottom-fadestart)/fadestart,1),0)
|
||
|
|
||
|
|
||
|
|
||
|
var displayheight = displaywidth * 4/15//dimensions.width > 900 ? 250 : 125
|
||
|
canvas.width = displaywidth*window.devicePixelRatio
|
||
|
canvas.style.width = displaywidth
|
||
|
canvas.height = displayheight*window.devicePixelRatio
|
||
|
canvas.style.height = displayheight
|
||
10 years ago
|
}
|
||
|
|
||
10 years ago
|
addEventListener('scroll', fixdim)
|
||
|
|
||
10 years ago
|
function drawtesseract(tesseract, opts){
|
||
|
var edges = tesseractedges()
|
||
|
for (var i = 0; i < tesseract.length; i++) {
|
||
|
var proj = project(tesseract[i], opts.size)
|
||
|
ctx.beginPath()
|
||
|
ctx.arc(proj.x + opts.x, proj.y + opts.y, opts.corner_radius, 0, 2 * Math.PI)
|
||
|
ctx.fill()
|
||
|
};
|
||
|
ctx.lineWidth = opts.line_width || 1
|
||
|
ctx.beginPath()
|
||
|
for (var i = 0; i < edges.length; i++) {
|
||
|
var v1 = project(tesseract[edges[i][0]], opts.size),
|
||
|
v2 = project(tesseract[edges[i][1]], opts.size)
|
||
|
ctx.moveTo(v1.x+opts.x,v1.y+opts.y)
|
||
|
ctx.lineTo(v2.x+opts.x,v2.y+opts.y)
|
||
|
};
|
||
|
ctx.stroke()
|
||
|
}
|
||
|
|
||
|
var as = -.371, df = -.01, gh = .12;
|
||
|
|
||
|
var asdf = 120
|
||
|
var sdfg = .01
|
||
|
|
||
|
var x = 10, y=10,w = 10,h = 10
|
||
|
|
||
|
function main (time) {
|
||
|
fixdim()
|
||
|
ctx.clearRect(0,0,canvas.width,canvas.height)
|
||
|
|
||
|
var t = time/10000
|
||
|
|
||
|
// "rgb(0,140,255)"
|
||
|
// ctx.strokeStyle = '#444'
|
||
|
// ctx.fillStyle = "rgb(0,140,255)"
|
||
|
ctx.strokeStyle = ctx.fillStyle = color
|
||
|
var sm = 1
|
||
|
|
||
|
// var m = tesseractwithrotation( 0,0,0,mouse.x/100 ,mouse.y/100, 0)
|
||
|
var m = tesseractwithrotation(t, t*2, t*3, mouse.x/100 , mouse.y/100, 0)
|
||
|
|
||
|
drawtesseract(m, {
|
||
|
x: as*canvas.width + canvas.width/2,
|
||
|
y: df*canvas.height + canvas.height/2,
|
||
|
size: gh*canvas.height,
|
||
|
corner_radius: 0,
|
||
|
line_width: 2
|
||
|
})
|
||
|
|
||
|
ctx.beginPath()
|
||
|
// ctx.fillStyle = 'red'
|
||
|
// ctx.fillRect(
|
||
|
// (as+.5 - .0058)*canvas.width,
|
||
|
// (df+.002+.5-.164)*canvas.height,// + canvas.height/2 - asdf/2,
|
||
|
// .0058*2*canvas.width,
|
||
|
// .164*2*canvas.height
|
||
|
// )
|
||
|
// ctx.fillRect(
|
||
|
// 0.0951*canvas.width,
|
||
|
// 0.0871*canvas.width,
|
||
|
// 0.0673*canvas.width,
|
||
|
// 0.0109*canvas.width
|
||
|
// )
|
||
|
|
||
|
// ctx.fill()
|
||
|
|
||
|
// var m = tesseractwithrotation(0,0,0, mouse.x/100 , mouse.y/100, 0)
|
||
|
// var m = tesseractwithrotation(t, t*2, t*3, mouse.x/100 , mouse.y/100, 0)
|
||
|
// var k = tesseractwithrotation(t, t*2, t*3, mouse.x/100+.08, mouse.y/100, 0)
|
||
|
|
||
|
|
||
|
lasttime = time
|
||
|
requestAnimationFrame(main)
|
||
|
}
|
||
|
|
||
10 years ago
|
|
||
10 years ago
|
init()
|
||
|
|
||
|
// })()
|