/****************************************************************************** ** Filename: fpoint.h ** Purpose: Abstract data type for 2D points (floating point coords) ** Author: Dan Johnson ** ** (c) Copyright Hewlett-Packard Company, 1988. ** (c) Copyright Hewlett-Packard Company, 1988. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. ******************************************************************************/ #ifndef FPOINT_H #define FPOINT_H /**---------------------------------------------------------------------------- Include Files and Type Defines ----------------------------------------------------------------------------**/ #include #include #include "host.h" /* define data structure to hold 2D points or vectors using floating point */ typedef struct { float x, y; } FPOINT; using FVECTOR = FPOINT; /**---------------------------------------------------------------------------- Macros ----------------------------------------------------------------------------**/ /* macros for computing miscellaneous functions of 2 points */ #define XDelta(A, B) ((B).x - (A).x) #define YDelta(A, B) ((B).y - (A).y) #define SlopeFrom(A, B) (YDelta(A, B) / XDelta(A, B)) #define AngleFrom(A, B) (atan2((double)YDelta(A, B), (double)XDelta(A, B))) #define XIntersectionOf(A, B, X) (SlopeFrom(A, B) * ((X)-A.x) + A.y) /*------------------------------------------------------------------------- Public Function Prototypes ---------------------------------------------------------------------------*/ float DistanceBetween(FPOINT A, FPOINT B); float NormalizedAngleFrom(FPOINT* Point1, FPOINT* Point2, float FullScale); #endif