Sunbeams

This project uses three.js. Make your choice and press reset.

  • intersections between sunbeams and ground

code

///////////////////////////////////
// ADD BUILDING /////////////
  /* construct building */
  var building = new THREE.Object3D();
  for ( var i = 0; i < xSize; i++ ) {
    for ( var j = 0; j < ySize; j++ ) {
      for ( var k = 0; k < zSize; k++ ) {
        /* cube */
        var mGeometry = new THREE.BoxGeometry( boxSize, boxSize, boxSize );
        var mMaterial = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
        var cube = new THREE.Mesh( mGeometry, mMaterial );
        /* edges */
        var mEdges = new THREE.EdgesGeometry( mGeometry );
        var mLine = new THREE.LineSegments( mEdges, new THREE.LineBasicMaterial( { color: 0x0000ff } ) );
        cube.add ( mLine );
        //cube.userData = "isBuilding";
        /* change position */
        cube.position.x = ( i * boxSize ) - ((( xSize - 1 ) / 2 ) * boxSize );
        cube.position.z = ( j * boxSize ) - ((( ySize - 1 ) / 2 ) * boxSize );
        cube.position.y = ( k * boxSize ) + ( boxSize / 2 );
        building.add ( cube );
      }
    }
  }
  scene.add ( building );

///////////////////////////////////
// CALCULATE INTERSECTION
  /* midpoint of sun */
  var Sx = sphere.position.x
  var Sy = sphere.position.y
  var Sz = sphere.position.z
  /* the normal of the plane */
  var Ex = pNormal.x
  var Ey = pNormal.y
  var Ez = pNormal.z
  for (var i = 0; i < building.children.length; i++) {
    /* midpoint of cubes */
    var Mx = building.children[i].position.x
    var My = building.children[i].position.y
    var Mz = building.children[i].position.z
    /* line: Sx + (Mx -Sx) * t; Sy + (My -Sy) * t; Sz + (Mz -Sz) * t;
       plane: normal and pt (0,0,0) */
    var t = ( - Ex * Sx - Ey * Sy - Ez * Sz ) / (Ex * Mx - Ex * Sx + Ey * My - Ey * Sy + Ez * Mz - Ez * Sz )
    var ptX = Sx + ( Mx - Sx ) * t
    var ptY = Sy + ( My - Sy ) * t
    var ptZ = Sz + ( Mz - Sz ) * t
    /* intersection point as sphere */
    var iGeometry = new THREE.SphereGeometry( boxSize, 16, 16 );
    var iMaterial = new THREE.MeshBasicMaterial( {color: 0x0fff00} );
    var intersPt = new THREE.Mesh( iGeometry, iMaterial );
    /* change position */
    intersPt.position.x = ptX;
    intersPt.position.y = ptY;
    intersPt.position.z = ptZ;
    scene.add( intersPt );

    /* show sunlines */
    var midPointSphere = sphere.position
    var midPointMesh = intersPt.position
    var dirGeometry = new THREE.Geometry();
    dirGeometry.vertices.push( midPointSphere, midPointMesh );
    var dirMaterial = new THREE.LineBasicMaterial({ color: 0x0f00ff });
    var dirLine  = new THREE.Line( dirGeometry, dirMaterial );
    scene.add( dirLine );
    if (program.get('showSunLines') == true) {
      dirLine.visible = true
    } else {
      dirLine.visible = false
    }
  }

eCAADe 2024:
Urban Street Space Analysis with Spherical Box-Counting

Urban Street Space Analysis with Spherical Box-Counting: Holistic digital Gestalt analysis of architecture in urban space
Talk and Proceeding: eCAADe 2024 – Data-Driven Intelligence (Nicosia, Cyprus | conference)

Spherical box-counting of urban street spaces is a novel method developed and refined by the authors to produce highly specific topological fractal fingerprinting of architecture in relation to observer position and in the context of the accompanying surroundings. ...

eCAADe 2024:
Visualizing Urban Transformations using a 3D Cellular Automaton

Visualizing Urban Transformations using a 3D Cellular Automaton
Talk and Proceeding: eCAADe 2024 – Data-Driven Intelligence (Nicosia, Cyprus | conference)

Urban transformation is key to achieving more livable and sustainable cities. However, modelling this evolution is highly non-trivial since there are many factors at play that manifest themselves in the built (or: non-built/restored) environment. In our most recent work, we have represented urban change as rules of a three-dimensional Cellular Automaton. ...

Entwerfen Reuse, Recycle, Reduce

Algorithmisches Bauen mit und für die Kreislaufwirtschaft

Das Entwerfen mit dem Titel „Reuse, Recycle, Reduce: Algorithmisches Bauen mit und für die Kreislaufwirtschaft“ verbindet die Planung eines mehrgeschoßigen Wohngebäudes mit digitalen Entwurfsstrategien.