teaching machines

CS 330 Lecture 23 – Matrix/vector and templates

March 30, 2012 by . Filed under cs330, lectures, spring 2012.

Agenda

TODO

Code

Vector.h

#ifndef VECTOR_H
#define VECTOR_H

#include <iostream>
#include <fstream>

class Vector2 {
  public:
    Vector2();
    Vector2(float x, float y);

    // write a subscript operator
    float& operator[](int index);

    const float& operator[](int index) const;

    Vector2 operator+(const Vector2& other);

    // overload a print operator

  private:
    float x;
    float y;
};

std::ostream& operator<<(std::ostream& out,
                         const Vector2& v);

#endif

Vector.cpp

#include <cassert>
#include "Vector.h"

Vector2::Vector2() :
  x(0.0f),
  y(0.0f) {
}   

Vector2::Vector2(float x, float y) :
  x(x),
  y(y) {
}

float& Vector2::operator[](int index) {
  assert(index >= 0 && index <= 1);  
  return index == 0 ? x : y;
}

const float& Vector2::operator[](int index) const {
  assert(index >= 0 && index <= 1);  
  return index == 0 ? x : y;
}

Vector2 Vector2::operator+(const Vector2& other) {
  return Vector2(x + other.x, y + other.y);  
}

std::ostream& operator<<(std::ostream& out,
                         const Vector2& v) {
  out << v[0] << "," << v[1];
}

drawer.cpp

#include <cmath>
#include <iostream>

#include "Matrix.h"
#include "Vector.h"

int main() {
  Matrix2 transform;
  float radians = 60.0f * 3.14159f / 180.0f;
  transform(0, 0) = cos(radians);
  transform(0, 1) = -sin(radians);
  transform(1, 0) = sin(radians);
  transform(1, 1) = cos(radians);
  transform(0, 2) = 0.0f;
  transform(1, 2) = 0.0f;
  transform(2, 0) = 0.0f;
  transform(2, 1) = 0.0f;
  transform(2, 2) = 1.0f;
  Vector2 point(1.0f, 0.0f);

  for (int i = 0; i < 6; ++i) {
    point = transform * point;
    std::cout << point << std::endl;
  }

  /* Vector2 point2(1.0f, 2.0f); */
  /* Vector2 sum = point + point2; */
  /* Vector2 sum = point.operator+(point2); */
  /* std::cout << "sum[0]: " << sum[0] << std::endl; */
  /* std::cout << "sum[1]: " << sum[1] << std::endl; */
  /* std::cout << "sum: " << sum << std::endl; */

  /* std::cout << "point[0]: " << point[0] << std::endl; */
  /* std::cout << "point[1]: " << point[1] << std::endl; */

  /* point[0] = 11.0f; */

  /* std::cout << "point[0]: " << point[0] << std::endl; */
  /* std::cout << "point[1]: " << point[1] << std::endl; */

  /* point[0] // point.getX() */
  /* point[1] // point.getY() */
}

Haiku

Typeless languages.
Puzzles whose pieces don’t lock.
Pain makes a picture.