Beispiel #1
0
  /*
   * Plots the given equation
   */
  public static void PlotGraph(Graphics g) {
    // start at the low point
    Point3D firstPoint = new Point3D(-1.25, -1.25, 0);
    Point3D secondPoint = new Point3D(-1.25, -1.25, 0);
    double inc = 0.05; // this looked the best
    g.setColor(Color.green);
    for (double y = -1.25; y <= 1.25; y += inc) {
      for (double x = -1.25; x <= 1.25; x += inc) {
        // draw the small square
        firstPoint.SetCoords(x, y, 0);
        secondPoint.SetCoords(x + inc, y + inc, 0);
        DrawSquare(g, firstPoint, secondPoint);
      }
    }

    g.setColor(Color.black);
    DrawAxes(g);
    Branding(g, "z = (x^2) + (y^2) - (x^3) - 8*x*(y^4)");
  }
Beispiel #2
0
  /*
   *  Draw the CSAC hallway
   *  This is done using the data collected on March 7
   */
  public static void DrawHallway(Graphics g) {

    double[][] ActiveTransform = new double[4][4];
    Assembly[] EMPTY = new Assembly[0];
    Assembly[] ceilingAssembly = new Assembly[0];

    // origin
    Point3D[] floorPoints = new Point3D[9];
    floorPoints[0] = new Point3D(-70.75, 0, 0);
    floorPoints[1] = new Point3D(70.75, 0, 0);
    floorPoints[2] = new Point3D(70.75, 0, -727.125);
    floorPoints[3] = new Point3D(-70.75, 0, -727.125);
    floorPoints[4] = new Point3D(-70.75, 0, -232.5);
    floorPoints[5] = new Point3D(-156.5, 0, -232.5);
    floorPoints[6] = new Point3D(-156.5, 0, -151.5);
    floorPoints[7] = new Point3D(-70.75, 0, -151.5);
    floorPoints[8] = new Point3D(-70.75, 0, 0);

    Object floor = new Object(floorPoints, IDENTITY, "Floor");
    floor.DrawObject(g, IDENTITY);
    ConnectWalls(g, floor, 132);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_TRANS, 132);
    Assembly ceiling = new Assembly(EMPTY, ActiveTransform, floor, "Ceiling");

    ceiling.Assemble(g, IDENTITY);

    Point3D[] hallwayCeilingPoints = new Point3D[4];
    // 81x104.75
    hallwayCeilingPoints[0] = new Point3D(0, 0, 0);
    hallwayCeilingPoints[1] = new Point3D(85.75, 0, 0);
    hallwayCeilingPoints[2] = new Point3D(85.75, 0, -81);
    hallwayCeilingPoints[3] = new Point3D(0, 0, -81);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_TRANS, 103);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -151.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -156.5);
    Object hallwayCeiling = new Object(hallwayCeilingPoints, ActiveTransform, "Hallway ceiling");
    hallwayCeiling.DrawObject(g, IDENTITY);

    hallwayCeilingPoints[0].SetCoords(0, 0, 0);
    hallwayCeilingPoints[1].SetCoords(0, 29, 0);
    hallwayCeilingPoints[2].SetCoords(0, 29, -81);
    hallwayCeilingPoints[3].SetCoords(0, 0, -81);
    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_TRANS, 103);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -151.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -70.75);
    Object hallwayWall = new Object(hallwayCeilingPoints, ActiveTransform, "Hallway wall");
    hallwayWall.DrawObject(g, IDENTITY);

    Point3D[] pillarPoints = new Point3D[4];
    pillarPoints[0] = new Point3D(-70.75, 0, -182.5);
    pillarPoints[1] = new Point3D(-70.75, 0, -201.5);
    pillarPoints[2] = new Point3D(-88.75, 0, -201.5);
    pillarPoints[3] = new Point3D(-88.75, 0, -182.5);

    Object pillar = new Object(pillarPoints, IDENTITY, "Pillar");
    pillar.DrawObject(g, IDENTITY);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_TRANS, 103);
    Assembly pillarAssembly = new Assembly(EMPTY, ActiveTransform, pillar, "Top of Pillar");
    pillarAssembly.Assemble(g, IDENTITY);
    ConnectWalls(g, pillar, 103);

    /*
     *   BEGIN DOOR ASSEMBLY
     */

    Point3D[] doorPoints = new Point3D[4];
    doorPoints[0] = new Point3D(0, 0, 0);
    doorPoints[1] = new Point3D(35.75, 0, 0);
    doorPoints[2] = new Point3D(35.75, 87, 0);
    doorPoints[3] = new Point3D(0, 87, 0);

    Assembly[] doorAssembly = new Assembly[0];

    // all the doors are magenta
    g.setColor(Color.magenta);
    Object door = new Object(doorPoints, IDENTITY, "Door");

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -53.75);
    Assembly door1 = new Assembly(EMPTY, ActiveTransform, door, "Alves Foss");
    doorAssembly = AppendToArray(doorAssembly, door1);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -251.375);
    Assembly door2 = new Assembly(EMPTY, ActiveTransform, door, "Terrence Soule");
    doorAssembly = AppendToArray(doorAssembly, door2);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -369.375);
    Assembly door3 = new Assembly(EMPTY, ActiveTransform, door, "Daniel Conte De Leon");
    doorAssembly = AppendToArray(doorAssembly, door3);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -568.125);
    Assembly door4 = new Assembly(EMPTY, ActiveTransform, door, "Greg Donahoe");
    doorAssembly = AppendToArray(doorAssembly, door4);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -644.875);
    Assembly door5 = new Assembly(EMPTY, ActiveTransform, door, "Robert Rinker");
    doorAssembly = AppendToArray(doorAssembly, door5);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -180);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 62.25);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -727.125);
    Assembly door6 = new Assembly(EMPTY, ActiveTransform, door, "East Office Door");
    doorAssembly = AppendToArray(doorAssembly, door6);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -691.375);
    Assembly door7 = new Assembly(EMPTY, ActiveTransform, door, "North Entrance");
    doorAssembly = AppendToArray(doorAssembly, door7);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -655.625);
    Assembly door8 = new Assembly(EMPTY, ActiveTransform, door, "North Entrance");
    doorAssembly = AppendToArray(doorAssembly, door8);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -474.875);
    Assembly door9 = new Assembly(EMPTY, ActiveTransform, door, "CS Office");
    doorAssembly = AppendToArray(doorAssembly, door9);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -156.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -151.5);
    Assembly door10 = new Assembly(EMPTY, ActiveTransform, door, "Clinton Jeffery");
    doorAssembly = AppendToArray(doorAssembly, door10);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, -123.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -151.5);
    Assembly door11 = new Assembly(EMPTY, ActiveTransform, door, "Clinton Jeffery Side Entrance");
    doorAssembly = AppendToArray(doorAssembly, door11);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -156.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -196.75);
    Assembly door12 = new Assembly(EMPTY, ActiveTransform, door, "Bruce Bolden");
    doorAssembly = AppendToArray(doorAssembly, door12);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -180);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -87.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -232.5);
    Assembly door13 = new Assembly(EMPTY, ActiveTransform, door, "Bruce Bolden Side Entrance");
    doorAssembly = AppendToArray(doorAssembly, door13);

    Assembly buildDoors = new Assembly(doorAssembly, IDENTITY, null, "Door Assembly");
    buildDoors.Assemble(g, IDENTITY);

    /*
     *   END DOOR ASSEMBLY
     */

    g.setColor(Color.black);

    Point3D[] windowPoints = new Point3D[4];
    windowPoints[0] = new Point3D(-51.75, 38, -727.125);
    windowPoints[1] = new Point3D(16.25, 38, -727.125);
    windowPoints[2] = new Point3D(16.25, 86, -727.125);
    windowPoints[3] = new Point3D(-51.75, 86, -727.125);
    Object window = new Object(windowPoints, IDENTITY, "Window");

    window.DrawObject(g, IDENTITY);

    /*
     *   BEGIN BOARD ASSEMBLY
     */

    Assembly[] board_array = new Assembly[0];
    // boards on the wall
    Point3D[] boardPoints = new Point3D[4];
    boardPoints[0] = new Point3D(0, 0, 0);
    boardPoints[1] = new Point3D(36, 0, 0);
    boardPoints[2] = new Point3D(36, 24, 0);
    boardPoints[3] = new Point3D(0, 24, 0);
    g.setColor(Color.blue);

    Object board = new Object(boardPoints, IDENTITY, "Board");

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -107.75);
    Assembly board1 = new Assembly(EMPTY, ActiveTransform, board, "Alves Foss Board");
    board_array = AppendToArray(board_array, board1);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -300.625);
    Assembly board2 = new Assembly(EMPTY, ActiveTransform, board, "Terrence Soule Board");
    board_array = AppendToArray(board_array, board2);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -430.375);
    Assembly board3 = new Assembly(EMPTY, ActiveTransform, board, "Daniel Conte De Leon Board");
    board_array = AppendToArray(board_array, board3);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -513.375);
    Assembly board4 = new Assembly(EMPTY, ActiveTransform, board, "Greg Donahoe Board");
    board_array = AppendToArray(board_array, board4);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, 70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -699.875);
    Assembly board5 = new Assembly(EMPTY, ActiveTransform, board, "Robert Rinker Board");
    board_array = AppendToArray(board_array, board5);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, -180);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_ROT, -90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -152.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -232.5);
    Assembly board6 = new Assembly(EMPTY, ActiveTransform, board, "Bruce Bolden Board");
    board_array = AppendToArray(board_array, board6);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Z_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -130.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 48);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -151.5);
    Assembly board7 = new Assembly(EMPTY, ActiveTransform, board, "Clint Jeffery Board");
    board_array = AppendToArray(board_array, board7);

    Assembly boardAssembly = new Assembly(board_array, IDENTITY, null, "Board Assembly");
    boardAssembly.Assemble(g, IDENTITY);

    /*
     *   END BOARD ASSEMBLY
     */

    // bulletin board and trophy case
    boardPoints[0].SetCoords(0, 0, 0);
    boardPoints[1].SetCoords(96, 0, 0);
    boardPoints[2].SetCoords(96, 53, 0);
    boardPoints[3].SetCoords(0, 53, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Y_ROT, 90);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.X_TRANS, -70.75);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, 33);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -30);

    Object bulletBoard = new Object(boardPoints, ActiveTransform, "Bulletin Board");
    bulletBoard.DrawObject(g, IDENTITY);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.Z_TRANS, -262.5);
    Assembly trophyCase = new Assembly(EMPTY, ActiveTransform, bulletBoard, "Trophy Case");

    trophyCase.Assemble(g, IDENTITY);

    Branding(g, "Hallway Model");
  }
Beispiel #3
0
  /*
   *  Draws Jordan in 3D letters
   */
  public static void DrawName(Graphics g) {

    double[][] ActiveTransform = IDENTITY;

    double startSpot = -12; // make sure the name is
    // J
    Point3D[] jpoints = new Point3D[10];
    jpoints[0] = new Point3D(0, 0, 0);
    jpoints[1] = new Point3D(3, 0, 0);
    jpoints[2] = new Point3D(3, -1, 0);
    jpoints[3] = new Point3D(2, -1, 0);
    jpoints[4] = new Point3D(2, -5, 0);
    jpoints[5] = new Point3D(0, -5, 0);
    jpoints[6] = new Point3D(0, -4, 0);
    jpoints[7] = new Point3D(1, -4, 0);
    jpoints[8] = new Point3D(1, -1, 0);
    jpoints[9] = new Point3D(0, -1, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot);
    Object J = new Object(jpoints, ActiveTransform, "J letter");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object J_Back = new Object(jpoints, ActiveTransform, "J back");
    J.DrawObject(g, IDENTITY);
    J_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, J);

    // O
    Point3D[] opoints_outer = new Point3D[4];
    opoints_outer[0] = new Point3D(0, 0, 0);
    opoints_outer[1] = new Point3D(3, 0, 0);
    opoints_outer[2] = new Point3D(3, -3, 0);
    opoints_outer[3] = new Point3D(0, -3, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot + 4);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, -2);
    Object O1 = new Object(opoints_outer, ActiveTransform, "O Letter");

    Point3D[] opoints_inner = new Point3D[4];
    opoints_inner[0] = new Point3D(1, -1, 0);
    opoints_inner[1] = new Point3D(2, -1, 0);
    opoints_inner[2] = new Point3D(2, -2, 0);
    opoints_inner[3] = new Point3D(1, -2, 0);

    Object O2 = new Object(opoints_inner, ActiveTransform, "inside o letter");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object O1_Back = new Object(opoints_outer, ActiveTransform, "O letter back");
    Object O2_Back = new Object(opoints_inner, ActiveTransform, "Inside o back");

    O1.DrawObject(g, IDENTITY);
    O2.DrawObject(g, IDENTITY);
    O1_Back.DrawObject(g, IDENTITY);
    O2_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, O1);
    ConnectLetters(g, O2);

    // R
    Point3D[] rpoints_outer = new Point3D[9];
    rpoints_outer[0] = new Point3D(0, 0, 0);
    rpoints_outer[1] = new Point3D(3, 0, 0);
    rpoints_outer[2] = new Point3D(3, -1, 0);
    rpoints_outer[3] = new Point3D(2, -1, 0);
    rpoints_outer[4] = new Point3D(3, -2.5, 0);
    rpoints_outer[5] = new Point3D(2.5, -3, 0);
    rpoints_outer[6] = new Point3D(1, -1.5, 0);
    rpoints_outer[7] = new Point3D(1, -3, 0);
    rpoints_outer[8] = new Point3D(0, -3, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot + 8);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, -2);
    Object R1 = new Object(rpoints_outer, ActiveTransform, "R outside");

    Point3D[] rpoints_inner = new Point3D[4];
    rpoints_inner[0] = new Point3D(1, -0.5, 0);
    rpoints_inner[1] = new Point3D(2, -0.5, 0);
    rpoints_inner[2] = new Point3D(2, -0.75, 0);
    rpoints_inner[3] = new Point3D(1, -0.75, 0);

    Object R2 = new Object(rpoints_inner, ActiveTransform, "R inside");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object R1_Back = new Object(rpoints_outer, ActiveTransform, "R back outside");
    Object R2_Back = new Object(rpoints_inner, ActiveTransform, "R back inside");

    R1.DrawObject(g, IDENTITY);
    R2.DrawObject(g, IDENTITY);
    R1_Back.DrawObject(g, IDENTITY);
    R2_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, R1);
    ConnectLetters(g, R2);

    // D
    Point3D[] dpoints_outer = new Point3D[5];
    dpoints_outer[0] = new Point3D(0, 0, 0);
    dpoints_outer[1] = new Point3D(2, 0, 0);
    dpoints_outer[2] = new Point3D(3, -1.5, 0);
    dpoints_outer[3] = new Point3D(2, -3, 0);
    dpoints_outer[4] = new Point3D(0, -3, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot + 12);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, -2);
    Object D1 = new Object(dpoints_outer, ActiveTransform, "D Outside");

    Point3D[] dpoints_inner = new Point3D[4];
    dpoints_inner[0] = new Point3D(0.75, -1, 0);
    dpoints_inner[1] = new Point3D(1.5, -1, 0);
    dpoints_inner[2] = new Point3D(1.5, -2, 0);
    dpoints_inner[3] = new Point3D(0.75, -2, 0);

    Object D2 = new Object(dpoints_inner, ActiveTransform, "D inside");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object D1_Back = new Object(dpoints_outer, ActiveTransform, "D Outside Back");
    Object D2_Back = new Object(dpoints_inner, ActiveTransform, "D Inside Back");

    D1.DrawObject(g, IDENTITY);
    D2.DrawObject(g, IDENTITY);
    D1_Back.DrawObject(g, IDENTITY);
    D2_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, D1);
    ConnectLetters(g, D2);

    // A
    Point3D[] apoints_outer = new Point3D[8];
    apoints_outer[0] = new Point3D(1, 0, 0);
    apoints_outer[1] = new Point3D(2, 0, 0);
    apoints_outer[2] = new Point3D(3, -3, 0);
    apoints_outer[3] = new Point3D(2, -3, 0);
    apoints_outer[4] = new Point3D(1.75, -2, 0);
    apoints_outer[5] = new Point3D(1.25, -2, 0);
    apoints_outer[6] = new Point3D(1, -3, 0);
    apoints_outer[7] = new Point3D(0, -3, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot + 15);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, -2);
    Object A1 = new Object(apoints_outer, ActiveTransform, "A outside");

    Point3D[] apoints_inner = new Point3D[3];
    apoints_inner[0] = new Point3D(1.5, -1, 0);
    apoints_inner[1] = new Point3D(1.75, -1.5, 0);
    apoints_inner[2] = new Point3D(1.25, -1.5, 0);
    Object A2 = new Object(apoints_inner, ActiveTransform, "A inside");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object A1_Back = new Object(apoints_outer, ActiveTransform, "A outside back");
    Object A2_Back = new Object(apoints_inner, ActiveTransform, "A inside back");

    A1.DrawObject(g, IDENTITY);
    A2.DrawObject(g, IDENTITY);
    A1_Back.DrawObject(g, IDENTITY);
    A2_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, A1);
    ConnectLetters(g, A2);

    // N
    Point3D[] npoints = new Point3D[10];
    npoints[0] = new Point3D(0, 0, 0);
    npoints[1] = new Point3D(1, 0, 0);
    npoints[2] = new Point3D(2, -2, 0);
    npoints[3] = new Point3D(2, 0, 0);
    npoints[4] = new Point3D(3, 0, 0);
    npoints[5] = new Point3D(3, -3, 0);
    npoints[6] = new Point3D(2, -3, 0);
    npoints[7] = new Point3D(1, -1, 0);
    npoints[8] = new Point3D(1, -3, 0);
    npoints[9] = new Point3D(0, -3, 0);

    ActiveTransform = BuildElementaryTransform(IDENTITY, TRANSFORM_CODE.X_TRANS, startSpot + 18.5);
    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Y_TRANS, -2);
    Object N = new Object(npoints, ActiveTransform, "N Letter");

    ActiveTransform = BuildElementaryTransform(ActiveTransform, TRANSFORM_CODE.Z_TRANS, -1);
    Object N_Back = new Object(npoints, ActiveTransform, "N Letter Back");

    N.DrawObject(g, IDENTITY);
    N_Back.DrawObject(g, IDENTITY);
    ConnectLetters(g, N);

    Branding(g, "3D Letters");
  }