Physalis ist ein Konzept für einen modularen, selbsttragenden vertikalen Garten. Der vertikale Garten besteht aus Pflanzmodulen, die mit Stahlseilen an einer Tragekonstruktion aufgehängt sind. Diese Tragekonstruktionen sind stapelbar. Die Form der Pflanzmodule basiert auf der Form der Blüte und Frucht einer Physalis.
Physalis ist mithilfe von und als Anschauungsbeispiel für Parametrisches Design entworfen. Dabei sind Nachhaltigkeit und Ästhetik, sowie Biophilic und Regenerative Design im Entwurfsprozess berücksichtig worden.
hängender vertikaler Garten
2023
2023



Projekttyp: Projekt zur Masterarbeit
Dauer: 6 Monate
Projekttyp: Projekt zur Masterarbeit
Dauer: 6 Monate
Physalis
Aufzeigung der Möglichkeiten von
Parametrischem Design im Produktdesign anhand eines Entwurfs eines vertikalen Gartens.
Aufzeigung der Möglichkeiten von Parametrischem Design im Produktdesign anhand eines Entwurfs eines vertikalen Gartens.
Lösungen für Nachhaltigkeit und Ästhetik durch Parametrisches Design.
Entwurf eines modularen, nachträglich installierbaren vertikalen Gartens, der an den Standort angepasst und selbsttragend ist.
Entwerfen basierend auf Biophilic und
Regenerative Design.
Entwerfen basierend auf Biophilic und Regenerative Design.
Entwerfen basierend auf Biophilic und Regenerative Design.








Problemstellung & Inspirationsboards











Skizzen





int i = 0;
while(i < SPlength){
pts.Add(SP[i]);
i++;
} //Startpunkte werden zur pts Liste hinzugefügt
Random random = new Random(RSeed);
RhinoList pts2 = new RhinoList();
for (int k = 0; k < NoP; k++)
{
double x = random.NextDouble() * xmax + xmin;
double y = random.NextDouble() * ymax + ymin;
double z = random.NextDouble() * zmax + zmin;
Point3d pt = new Point3d(x, y, z);
pts2.Add(pt);
} //Erzeugung von pseudozufälligen Punkten in pts2 Liste
for(int l = 0; l < NoP; l++){
Point3d curr_pt = pts2[l];
Point3d index = Point3dList.ClosestPointInList(pts, curr_pt);
Point3d cp = index;
Vector3d vect = cp - curr_pt;
Vector3d unitVect = new Vector3d();
unitVect = vect;
unitVect.Unitize();
Rhino.Geometry.Vector3d subVect = vect - unitVect * Spa;
var subVect1 = Rhino.Geometry.Transform.Translation(subVect);
Point3d newPt = curr_pt;
newPt.Transform(subVect1);
pts.Add(newPt);
}
/* heranziehen des nächsten Punktes in der Liste an den näheliegensten
Punkt aus Liste pts und einsortieren des herangezogenen Punktes
in pts */
Points = pts;
}
using System;
using System.Collections;
using System.Collections.Generic;
using Rhino;
using Rhino.Geometry;
using Grasshopper;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Data;
using Grasshopper.Kernel.Types;
using Rhino.Input;
using Rhino.DocObjects;
using Rhino.Collections;
using System.Linq;
using System.IO;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.Runtime.InteropServices;
using GH_IO;
using GH_IO.Serialization;
public class Script_Instance : GH_ScriptInstance
{
private void RunScript(List SP, int NoP, Point3d BBMin, Point3d BBMax, int Spa, int RSeed, ref object Points)
{
double xmin = 0;
double ymin = BBMin[1];
double zmin = BBMin[2];
double xmax = BBMax[0];
double ymax = 0;
double zmax = BBMax[2];
//Abmessungen der Bounding Box
int SPlength = SP.Count;
//Anzahl der Startpunkte wird gezaehlt
RhinoList pts = new RhinoList();
using System;
using System.Collections;
using System.Collections.Generic;
using Rhino;
using Rhino.Geometry;
using Grasshopper;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Data;
using Grasshopper.Kernel.Types;
using Rhino.Input;
using Rhino.DocObjects;
using Rhino.Collections;
using System.Linq;
using System.IO;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.Runtime.InteropServices;
using GH_IO;
using GH_IO.Serialization;
public class Script_Instance : GH_ScriptInstance
{
private void RunScript(List SP, int NoP, Point3d BBMin, Point3d BBMax, int Spa, int RSeed, ref object Points)
{
double xmin = 0;
double ymin = BBMin[1];
double zmin = BBMin[2];
double xmax = BBMax[0];
double ymax = 0;
double zmax = BBMax[2];
//Abmessungen der Bounding Box
int SPlength = SP.Count;
//Anzahl der Startpunkte wird gezaehlt
RhinoList pts = new RhinoList();
int i = 0;
while(i < SPlength){
pts.Add(SP[i]);
i++;
} //Startpunkte werden zur pts Liste hinzugefügt
Random random = new Random(RSeed);
RhinoList pts2 = new RhinoList();
for (int k = 0; k < NoP; k++)
{
double x = random.NextDouble() * xmax + xmin;
double y = random.NextDouble() * ymax + ymin;
double z = random.NextDouble() * zmax + zmin;
Point3d pt = new Point3d(x, y, z);
pts2.Add(pt);
} //Erzeugung von pseudozufälligen Punkten in pts2 Liste
for(int l = 0; l < NoP; l++){
Point3d curr_pt = pts2[l];
Point3d index = Point3dList.ClosestPointInList(pts, curr_pt);
Point3d cp = index;
Vector3d vect = cp - curr_pt;
Vector3d unitVect = new Vector3d();
unitVect = vect;
unitVect.Unitize();
Rhino.Geometry.Vector3d subVect = vect - unitVect * Spa;
var subVect1 = Rhino.Geometry.Transform.Translation(subVect);
Point3d newPt = curr_pt;
newPt.Transform(subVect1);
pts.Add(newPt);
}
/* heranziehen des nächsten Punktes in der Liste an den näheliegensten
Punkt aus Liste pts und einsortieren des herangezogenen Punktes
in pts */
Points = pts;
}
Algorithmus & Varianten















Fertiger Entwurf


