123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /**
- * @file
- * @ingroup common_utils
- * @brief geometric functions (e.g. on points and boxes)
- *
- * with application to, but no specific dependence on graphs
- */
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at https://graphviz.org
- *************************************************************************/
- #pragma once
- #include <stdbool.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "geom.h"
- #ifdef GVDLL
- #ifdef GVC_EXPORTS
- #define GEOMPROCS_API __declspec(dllexport)
- #else
- #define GEOMPROCS_API __declspec(dllimport)
- #endif
- #endif
- #ifndef GEOMPROCS_API
- #define GEOMPROCS_API /* nothing */
- #endif
- GEOMPROCS_API boxf flip_rec_boxf(boxf b, pointf p);
- GEOMPROCS_API double ptToLine2 (pointf l1, pointf l2, pointf p);
- GEOMPROCS_API int lineToBox(pointf p1, pointf p2, boxf b);
- GEOMPROCS_API pointf ccwrotatepf(pointf p, int ccwrot);
- GEOMPROCS_API pointf cwrotatepf(pointf p, int cwrot);
- GEOMPROCS_API void rect2poly(pointf *p);
- GEOMPROCS_API int line_intersect (pointf a, pointf b, pointf c, pointf d, pointf* p);
- static inline point add_point(point p, point q)
- {
- point r;
- r.x = p.x + q.x;
- r.y = p.y + q.y;
- return r;
- }
- static inline pointf add_pointf(pointf p, pointf q)
- {
- pointf r;
- r.x = p.x + q.x;
- r.y = p.y + q.y;
- return r;
- }
- static inline pointf sub_pointf(pointf p, pointf q)
- {
- pointf r;
- r.x = p.x - q.x;
- r.y = p.y - q.y;
- return r;
- }
- static inline pointf mid_pointf(pointf p, pointf q)
- {
- pointf r;
- r.x = (p.x + q.x) / 2.;
- r.y = (p.y + q.y) / 2.;
- return r;
- }
- static inline pointf interpolate_pointf(double t, pointf p, pointf q)
- {
- pointf r;
- r.x = p.x + t * (q.x - p.x);
- r.y = p.y + t * (q.y - p.y);
- return r;
- }
- static inline point exch_xy(point p)
- {
- point r;
- r.x = p.y;
- r.y = p.x;
- return r;
- }
- static inline pointf exch_xyf(pointf p)
- {
- pointf r;
- r.x = p.y;
- r.y = p.x;
- return r;
- }
- static inline bool boxf_overlap(boxf b0, boxf b1) {
- return OVERLAP(b0, b1);
- }
- static inline pointf perp (pointf p)
- {
- pointf r;
- r.x = -p.y;
- r.y = p.x;
- return r;
- }
- static inline pointf scale (double c, pointf p)
- {
- pointf r;
- r.x = c * p.x;
- r.y = c * p.y;
- return r;
- }
- #undef GEOMPROCS_API
- #ifdef __cplusplus
- }
- #endif
|