/*
* Copyright 2013 John Zahorjan
*
* This file is code developed as part of
* one of the UW CSE 333 lectures (333exercises).
*
* 333exercises is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 333exercises is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 333exercises. If not, see .
*/
#include
#include
#include
//-------------------------------------------------------------------
// Point
typedef struct Point_st {
float x;
float y;
} Point;
Point ORIGIN = {0.0, 0.0};
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// Vector
typedef Point Vector;
Vector UNIT_X = {1.0, 0.0};
Vector UNIT_Y = {0.0, 1.0};
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// Rect
typedef struct Rect_st {
Point ll; // lower left
Point ur; // upper right
} Rect;
//-------------------------------------------------------------------
Point Point_add(Point p, Vector v) {
Point result = {p.x + v.x, p.y + v.y};
return result;
}
bool Rect_containsPoint(Rect r, Point p) {
return p.x >= r.ll.x && p.x <= r.ur.x && p.y >= r.ll.y && p.y <= r.ur.y;
}
//-------------------------------------------------------------------
// main
//-------------------------------------------------------------------
void Usage(char *argv[]) {
printf("Usage: %s x y\nWhere x and y describe a point.\n", argv[0]);
printf("Prints whether the point is in the unit rectangle or not.\n");
exit(EXIT_FAILURE);
}
int main(int argc, char* argv[]) {
float inputX, inputY;
Point unitCorner = Point_add(Point_add(ORIGIN, UNIT_X), UNIT_Y);
Rect unitRect = { ORIGIN, unitCorner };
if ( argc != 3 ) Usage(argv);
if ( sscanf(argv[1], "%f", &inputX) != 1 ) Usage(argv);
if ( sscanf(argv[2], "%f", &inputY) != 1 ) Usage(argv);
Point userPoint = { inputX, inputY };
if ( Rect_containsPoint(unitRect, userPoint) )
printf("Point is in the unit rectangle\n");
else
printf("Point is not in the unit rectangle\n");
return EXIT_SUCCESS;
}