87 lines
1.8 KiB
C++
87 lines
1.8 KiB
C++
#include <iostream>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <memory>
|
|
#include "Image.h"
|
|
|
|
// This allows you to skip the `std::` in front of C++ standard library
|
|
// functions. You can also say `using std::cout` to be more selective.
|
|
// You should never do this in a header file.
|
|
using namespace std;
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
if(argc < 10) {
|
|
cout << "Usage: L01 filename width height x1 y1 x2 y2 x3 y3" << endl;
|
|
return 0;
|
|
}
|
|
// Output filename
|
|
string filename(argv[1]);
|
|
// Width of image
|
|
int width = atoi(argv[2]);
|
|
// Height of image
|
|
int height = atoi(argv[3]);
|
|
|
|
// Initialize coordinate variables to make things easier
|
|
float x1 = atoi(argv[4]);
|
|
float y1 = atoi(argv[5]);
|
|
float x2 = atoi(argv[6]);
|
|
float y2 = atoi(argv[7]);
|
|
float x3 = atoi(argv[8]);
|
|
float y3 = atoi(argv[9]);
|
|
|
|
// Vertex 1
|
|
vertex v1;
|
|
v1.x = x1;
|
|
v1.y = y1;
|
|
v1.z = 0.0;
|
|
// Vertex 2
|
|
vertex v2;
|
|
v2.x = x2;
|
|
v2.y = y2;
|
|
v2.z = 0.0;
|
|
// Vertex 3
|
|
vertex v3;
|
|
v3.x = x3;
|
|
v3.y = y3;
|
|
v3.z = 0.0;
|
|
// Triangle
|
|
Tri t(v1, v2, v3);
|
|
|
|
// Find xmin, xmax, ymin, ymax
|
|
float xmin = x1;
|
|
float xmax = x1;
|
|
float ymin = y1;
|
|
float ymax = y1;
|
|
if(x2 < xmin)
|
|
xmin = x2;
|
|
if(x3 < xmin)
|
|
xmin = x3;
|
|
if(x2 > xmax)
|
|
xmax = x2;
|
|
if(x3 > xmax)
|
|
xmax = x3;
|
|
if(y2 < ymin)
|
|
ymin = y2;
|
|
if(y3 < ymin)
|
|
ymin = y3;
|
|
if(y2 > ymax)
|
|
ymax = y2;
|
|
if(y3 > ymax)
|
|
ymax = y3;
|
|
|
|
// Create the image. We're using a `shared_ptr`, a C++11 feature.
|
|
auto image = make_shared<Image>(width, height);
|
|
// Draw a rectangle
|
|
for(int y = ymin; y < ymax; ++y) {
|
|
for(int x = xmin; x < xmax; ++x) {
|
|
unsigned char r = 255;
|
|
unsigned char g = 0;
|
|
unsigned char b = 0;
|
|
image->setPixel(x, y, r, g, b);
|
|
}
|
|
}
|
|
// Write image to file
|
|
image->writeToFile(filename);
|
|
return 0;
|
|
}
|