/* * 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; }