mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-24 11:13:35 +00:00
294a54846e
Sun Jul 30 12:52:16 CEST 2000 Stanislav Brabec <utx@penguin.cz> * plug-ins/gap/gap_mov_dialog.c: Removed embedded EOLs and spaces from tooltips, few typos. Sun Jul 30 12:52:16 CEST 2000 Stanislav Brabec <utx@penguin.cz> On request of Martin Weber <martweb@gmx.net>: * plug-ins/sel2path/bitmap.h * plug-ins/sel2path/bounding-box.h * plug-ins/sel2path/global.h * plug-ins/sel2path/math.c * plug-ins/sel2path/vector.c * plug-ins/sel2path/vector.h plug-ins/sel2path has a number of functions that are declared as returning a `const' return value. The ANSI spec is a bit vague on it, but my reading of the spec indicates that the intent is that this is not legal. In any case, at least one compiler (the compiler on AIX and on IRIX and lcc) objects to functions that are declared/defined to return a const value.
96 lines
3.4 KiB
C
96 lines
3.4 KiB
C
/* vector.h: operations on vectors and points.
|
|
|
|
Copyright (C) 1992 Free Software Foundation, Inc.
|
|
|
|
This program 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 2, or (at your option)
|
|
any later version.
|
|
|
|
This program 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 this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
|
|
#ifndef VECTOR_H
|
|
#define VECTOR_H
|
|
|
|
#include "types.h"
|
|
|
|
/* Our vectors are represented as displacements along the x and y axes. */
|
|
|
|
typedef struct
|
|
{
|
|
real dx, dy;
|
|
} vector_type;
|
|
|
|
|
|
/* Consider a point as a vector from the origin. */
|
|
extern vector_type make_vector (const real_coordinate_type);
|
|
|
|
/* And a vector as a point, i.e., a displacement from the origin. */
|
|
extern real_coordinate_type vector_to_point (const vector_type);
|
|
|
|
|
|
/* Definitions for these common operations can be found in any decent
|
|
linear algebra book, and most calculus books. */
|
|
|
|
extern real magnitude (const vector_type);
|
|
extern vector_type normalize (const vector_type);
|
|
|
|
extern vector_type Vadd (const vector_type, const vector_type);
|
|
extern real Vdot (const vector_type, const vector_type);
|
|
extern vector_type Vmult_scalar (const vector_type, const real);
|
|
extern real Vangle (const vector_type in, const vector_type out);
|
|
|
|
/* These operations could have been named `P..._vector' just as well as
|
|
V..._point, so we may as well allow both names. */
|
|
#define Padd_vector Vadd_point
|
|
extern real_coordinate_type Vadd_point
|
|
(const real_coordinate_type, const vector_type);
|
|
|
|
#define Psubtract_vector Vsubtract_point
|
|
extern real_coordinate_type Vsubtract_point
|
|
(const real_coordinate_type, const vector_type);
|
|
|
|
/* This returns the rounded sum. */
|
|
#define IPadd_vector Vadd_int_point
|
|
extern coordinate_type Vadd_int_point
|
|
(const coordinate_type, const vector_type);
|
|
|
|
/* Take the absolute value of both components. */
|
|
extern vector_type Vabs (const vector_type);
|
|
|
|
|
|
/* Operations on points with real coordinates. It is not orthogonal,
|
|
but more convenient, to have the subtraction operator return a
|
|
vector, and the addition operator return a point. */
|
|
extern vector_type Psubtract
|
|
(const real_coordinate_type, const real_coordinate_type);
|
|
|
|
/* These are heavily used in spline fitting, so we define them as macros
|
|
instead of functions. */
|
|
#define Padd(rc1, rc2) \
|
|
((real_coordinate_type) { (rc1).x + (rc2).x, (rc1).y + (rc2).y })
|
|
#define Pmult_scalar(rc, r) \
|
|
((real_coordinate_type) { (rc).x * (r), (rc).y * (r) })
|
|
|
|
/* Similarly, for points with integer coordinates; here, a subtraction
|
|
operator that does return another point is useful. */
|
|
extern vector_type IPsubtract
|
|
(const coordinate_type, const coordinate_type);
|
|
extern coordinate_type IPsubtractP
|
|
(const coordinate_type, const coordinate_type);
|
|
extern coordinate_type IPadd
|
|
(const coordinate_type, const coordinate_type);
|
|
extern coordinate_type IPmult_scalar (const coordinate_type, const int);
|
|
extern real_coordinate_type IPmult_real
|
|
(const coordinate_type, const real);
|
|
extern boolean IPequal (const coordinate_type, const coordinate_type);
|
|
|
|
#endif /* not VECTOR_H */
|