twod.h

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|