Monday, November 7, 2016

Presentation and Code for Week 11

Presentations:
Starting point code:
#include <iostream>
#include <cmath>
using namespace std;

double PI = acos(-1);

struct Point {
    double x, y;
};

struct Triangle {
    Point a, b, c;
};

double dist (Point a, Point b) {
    // Pythagoream Theorem a^2 + b^2 = c^2
    double dx = a.x - b.x;
    double dy = a.y - b.y;
    return (sqrt (dx * dx + dy * dy));
}

double triangleArea (Triangle triangle) {
    // Compute the area of a triangle from its corner points
    
    // 1. Compute the lenghts of the side
    double a = dist(triangle.b, triangle.c);
    double b = dist(triangle.a, triangle.c);
    double c = dist(triangle.a, triangle.b);
    
    // 2. Plug the lengths into the standard formula
    double s = (a + b + c) / 2;
    double t = s * (s-a) * (s-b) * (s-c);
    return sqrt (t); // <cmath>
}

string pointContents (Point p) {
    return  "{ " + to_string(p.x) + ", " + 
                   to_string(p.y) + " }";
}

// NOT ADVISED
string printContents (Point p) {
    cout  "{ " << to_string(p.x) << ", " << 
                  to_string(p.y) << " }";
}

string triangleContents (Triangle t) {
    return "{ " + pointContents(t.a) + ", " + 
                  pointContents(t.b) + ", " + 
                  pointContents(t.c) + " }";
}

Code at end of class.

Triangle.hpp:
//
//  Triangle.hpp
//  Nov07
//

#ifndef Triangle_hpp
#define Triangle_hpp

#include <string>
using namespace std;

struct Point {
    double x, y;
    
    double distanceTo (Point other);
    string contents ();
    void print ();
};

struct Triangle {
    Point a, b, c;
    
    Triangle (Point aa, Point bb, Point cc);
    string contents ();
    double area ();
};

#endif /* Triangle_hpp */


Triangle.cpp:
//
//  Triangle.cpp
//  Nov07
//
//  Created by Mark Brautigam on 11/7/16.
//  Copyright © 2016 Mark Brautigam. All rights reserved.
//

#include <iostream>
#include <string>
#include <cmath>
#include "Triangle.hpp"
using namespace std;
 
     // POINT functions
     //
     // this causes problems and I didn't figure out why
     //
     /*Point (double xx, double yy) {
     x = xx;
     y = yy;
     }
     
     Point (Point &p) {
     x = p.x;
     y = p.y;
     }*/
    
    double Point::distanceTo (Point other) {
        // Pythagoream Theorem a^2 + b^2 = c^2
        double dx = other.x - x;
        double dy = other.y - y;
        return (sqrt (dx * dx + dy * dy));
    }
    
    string Point::contents () {
        return  "{ " + to_string(x) + ", " +
        to_string(y) + " }";
    }
    
    void Point::print () {
        cout << contents ();
    }


     // TRIANGLE functions
     //
     // Constructor
     //
    Triangle::Triangle (Point aa, Point bb, Point cc) {
        a = aa;
        b = bb;
        c = cc;
    }
    
    string Triangle::contents () {
        return "{ " + a.contents() + ", " +
        b.contents() + ", " +
        c.contents() + " }";
    }
    
    double Triangle::area () {
        // Compute the area of a triangle from its corner points
        
        // 1. Compute the lengths of the side
        double dbc = b.distanceTo(c);
        double dac = a.distanceTo(c);
        double dab = a.distanceTo(b);
        
        // 2. Plug the lengths into the standard formula
        double s = (dbc + dac + dab) / 2;
        double t = s * (s-dbc) * (s-dac) * (s-dab);
        return sqrt (t); // <cmath>
    }


main.cpp:
//
//  main.cpp
//  Nov07
//
#include <iostream>
#include <cmath>
#include <vector>
#include "Triangle.hpp"
using namespace std;

// Swap function does not work unless the parameters
// are passed by reference using &
// 
void swap (int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

int main(int argc, const char * argv[]) {
    
    vector<int> tester = { 1, 2, 3, 4, 5 };
    for (int i=0; i<tester.size(); i++) {
        cout << tester[i] << " ";
    }
    swap (tester[1], tester[2]);
    for (int i=0; i<tester.size(); i++) {
        cout << tester[i] << " ";
    }
    
    Point p = { 42, 17 };
    Point q = { 17, 42 };
    double d = p.distanceTo(q);
    cout << d;
    d = q.distanceTo(p);
    cout << d;
    cout << p.contents();
    cout << endl;
    
    Triangle t ( p, q, { 100, 100 } );
    cout << t.area();
    cout << endl;

    return 0;
}


No comments:

Post a Comment