C:\home\SVGCats_src\src\twod.h
1|/************************************************************************** 2|* 1. <<< 二次元グラフィックス(代数)(TwoD) >>> 3|***************************************************************************/ 4| 5|#ifndef __TWOD_H 6|#define __TWOD_H 7| 8|/*---------------------------------------------------------------------- 9|[Module Property] 10|name = TwoD 11|title = 二次元グラフィックス(代数) 12|category = グラフィック 13|src = twod.c 14|depend = 15|priority = 16|accord = 17|----------------------------------------------------------------------*/ 18| 19|#ifndef USES_PRIORITY_HEADER 20|/*[START_OF_PRIORITY_HEADER]*/ 21| 22|#ifndef TWOD_TYPEDEF 23|#define TWOD_TYPEDEF 24| 25|#define USES_TWOD 26| 27|typedef struct _TwoD_XY TwoD_XY; 28|typedef struct _TwoD_Poly TwoD_Poly; 29| 30|#define STDLIBS_INCLUDE_STDIO_H 31|#define STDLIBS_INCLUDE_STDLIB_H 32| 33|#endif 34| 35|/*[END_OF_PRIORITY_HEADER]*/ 36|#endif /* USES_PRIORITY_HEADER */ 37| 38| 39|#ifdef _STDLIB 40|#include <stdlib.h> 41|#endif 42| 43| 44| 45|/*------------------------------------------------------------------------*/ 46|/* 2. <<< Interface Area ----------------------------------------------- >>> */ 47|/*------------------------------------------------------------------------*/ 48| 49| 50|#ifdef __cplusplus 51|extern "C" { 52|#endif 53| 54|/************************************************************************** 55|* 3. <<< [TwoD_XY] 二次元座標 >>> 56|***************************************************************************/ 57|struct _TwoD_XY { 58| double x, y; 59|}; 60| 61|void TwoD_XY_init( TwoD_XY*, double x, double y ); 62|int TwoD_XY_getOutProd( TwoD_XY*, TwoD_XY* ); 63|void TwoD_XY_rot( TwoD_XY*, const TwoD_XY* center, double radian ); 64|#ifdef USES_THREED 65|void TwoD_XY_initBy3D( TwoD_XY*, ThreeD_TwoD* f, ThreeD_XYZ* p ); 66|#endif 67|int TwoD_XY_getCrossLineH( double y, TwoD_XY* p1, TwoD_XY* p2, 68| TwoD_XY* out ); 69|bool TwoD_XY_isInPoly( TwoD_XY* p, TwoD_Poly* poly ); 70|#ifndef ERRORS_CUT_DEBUG_TOOL 71|void TwoD_XY_print( TwoD_XY* ); 72|#endif 73| 74| 75| 76|/************************************************************************** 77|* 4. <<< [TwoD_Poly] ポリゴン >>> 78|***************************************************************************/ 79|struct _TwoD_Poly { 80| TwoD_XY* p_array; /* 頂点座標の配列の先頭アドレス */ 81| int n; /* n 角形 */ 82| int color; /* 色 */ 83|}; 84| 85|void TwoD_Poly_init( TwoD_Poly*, TwoD_XY* p_array, int n, int color ); 86|int TwoD_Poly_getConvexType( TwoD_Poly* ); 87|#ifdef USES_THREED 88|void TwoD_Poly_initByThreeD( TwoD_Poly*, TwoD_XY* p_array, 89| size_t p_array_sizeof, ThreeD_Poly* poly3, ThreeD_ViewL* view ); 90|void TwoD_Poly_initByThreeD2( TwoD_Poly*, TwoD_XY* p_array, 91| size_t p_array_sizeof, ThreeD_TwoD* f, ThreeD_Poly* poly3 ); 92|#endif /* USES_THREED */ 93| 94|void TwoD_Poly_print( TwoD_Poly* ); 95| 96| 97|/* 5. <<< [TwoD_LeftConvex,TwoD_RightConvex,TwoD_NotConvex,TwoD_NotPoly] >>> */ 98|#define TwoD_LeftConvex 1 /* 左回り凸型 */ 99|#define TwoD_RightConvex -1 /* 右回り凸型 */ 100|#define TwoD_NotConvex 0 /* 凹型 */ 101|#define TwoD_NotPoly 99 /* 多角形でない */ 102| 103| 104|#ifdef __cplusplus 105|} 106|#endif 107| 108|/*------------------------------------------------------------------------*/ 109|/* 6. <<< Mapping Area ------------------------------------------------- >>> */ 110|/*------------------------------------------------------------------------*/ 111| 112| 113| 114|/************************************************************************* 115|* 7. <<< [TwoD_XY_init] 座標を設定する >>> 116|**************************************************************************/ 117|#define TwoD_XY_init( this, x0, y0 ) \ 118| ((this)->x = (x0), (this)->y = (y0)) 119| 120| 121| 122|/************************************************************************* 123|* 8. <<< [TwoD_XY_getOutProd] 外積を求める >>> 124|*【引数】 125|* ・TwoD_XY* v1,v2; 外積のパラメータ(ベクトル) 126|* ・double 返り値; 外積のベクトル成分 127|*【補足】 128|*・返り値は、v1 が v2 から見て左向きの場合、正の値、 129|* 平行の場合、0、右向きの場合、負の値が返ります。 130|* (ただし、X 軸の左向きが Y 軸の場合) 131|* 一般のグラフィック画面では逆になります。 132|*・一般の外積は、三次元ベクトルです。 133|**************************************************************************/ 134|#define TwoD_XY_getOutProd( v1, v2 ) \ 135| ( (v1)->x * (v2)->y - (v1)->y * (v2)->x ) 136| 137| 138| 139|#endif 140| 141|