Fractal Aesthetics in Architecture

Journal paper, in Applied Mathematics & Information Sciences. (article)

Wolfgang E. Lorenz, Jan Andres und Georg Franck. This paper deals with fractal aesthetics and proposes a new fractal analysis method for the perceptual study of architecture. The authors believe in the universality of formulas and aim to complement the architectural description in terms of proportion. ...

Autor Jezek

Webdesign für den Autor Dr. Jezek und das Buch Rachemond.

three.js

Example: Sunbeams

an example for three.js

SimAUD 2017

A Building Database for Simulations Requiring Schemata. (book)

Gabriel Wurzer, Jelena Djordjic, Wolfgang E. Lorenz und Vahid Poursaeed.
Obtaining spatial representations of existing buildings for use in simulation is challenging: To begin with, getting permission to access submitted construction plans can take a long time.. ...

Steuerberater Kanzlei

Redesign der Homepage für die Kanzlei Kowarik als Responsive Design.

Steuerberater Kanzlei

Redesign der Homepage für die Kanzlei Jupiter als Responsive Design.

 

"Sun Shots"

This project uses three.js. Make your choice and press reset. Or press play button and change settings.

  • a source creates point
  • the point move away from source
  • intersections with ground or buildings are highlighted

code

///////////////////////////////////
// ADD BUILDINGS ////////////

  /* construct buildings */
  var buildings = new THREE.Object3D();
  /* building1 */
  var mGeometry = new THREE.BoxGeometry( bWidth, bHeight, bDepth );
  var mMaterial = new THREE.MeshLambertMaterial( { color: 0xffff00 } );
  var building1 = new THREE.Mesh( mGeometry, mMaterial );
  /* edges */
  var mEdges = new THREE.EdgesGeometry( mGeometry );
  var mLine = new THREE.LineSegments( mEdges, new THREE.LineBasicMaterial( { color: 0x0000ff } ) );
  building1.add ( mLine );
  /* change position */
  building1.position.x = - bWidth * 2 ;
  building1.position.y = bHeight / 2 ;
  building1.position.z = bDepth * 3 ;
  buildings.add ( building1 );

///////////////////////////////////
// SHADOWS //////////////////

  /* 1. tell the renderer that you want shadows */
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  renderer.shadowMapSoft = true;
  for (var i = 0; i < buildings.children.length; i++) {
    /* 2. enable objects to cast shadows */
    buildings.children[i].castShadow = true;
    /* 3. enable objects to receive shadows */
    buildings.children[i].receiveShadow = true;
  }
  /* 3. enable objects to receive shadows */
  ground.receiveShadow = true;
  /* 4. enable a light source to cast shadows (directional or spotlight only) */
  light1 = new THREE.PointLight( 0xff0000, 1, 100 );
  light1.position.set( sunSphere.position.x, sunSphere.position.y, sunSphere.position.z );
  light1.castShadow = true;
  scene.add( light1 );

///////////////////////////////////// INTERSECTIONS ///////////

  var numPts = sunPoints.children.length;
  /* move */
  for (var i = 0; i < numPts; i++) {
      sunPoints.children[i].translateX ( sunPoints.children[i].userData.direction.x * step )
      sunPoints.children[i].translateY ( sunPoints.children[i].userData.direction.y * step )
      sunPoints.children[i].translateZ ( sunPoints.children[i].userData.direction.z * step )

      if (( getDistance( sunPoints.children[i], sunSphere ) > maxradius ) || ( sunPoints.children[i].position.y > sunSphere.position.y ) || ( sunPoints.children[i].position.y < (-2 * step) )) {
      sunPoints.children[i].userData.delete = true;
    } else {
      var bounding_sp = new THREE.Box3().setFromObject(sunPoints.children[i]);
      var ground_bounding = new THREE.Box3().setFromObject(ground);
        var intersectGround = ground_bounding.intersectsBox(bounding_sp);
      /* intersection of "sun points" with ground */
        if ( intersectGround == true ){
          sunPoints.children[i].userData.intersects = true;
        } else {
           /* intersection of "sun points" with buildings */
          for (var j = 0; j < buildings.children.length; j++) {
          var building_bounding = new THREE.Box3().setFromObject(buildings.children[j]);
          var intersectBuilding = building_bounding.intersectsBox(bounding_sp);
              if ( intersectBuilding == true ){
                  sunPoints.children[i].userData.intersects = true;
              } else {
            sunPoints.children[i].userData.delete = false;
          }
          }
        }
      }
  }