My favorites | Sign in
Project Home
Project Information
Members

About

"libneet" is 2D graphics library written for this book.

http://www.amazon.co.jp/dp/479800958X

Source/Data

http://libneet.ysnet.org/libneet.zip (libneet_conf.hを書き換えて使ってね

http://code.google.com/p/libneet/wiki/FullscratchBookData

本書で使われたデータ等はこちら。

Errata

P.231~、CTexMapSideの未実装だった部分のコードはこちら。

bool CTexMapSide::Add( TTexMapVertex* v1, TTexMapVertex* v2 )
{
  m_side[ m_num ].v1 = v1;
  m_side[ m_num ].v2 = v2;
  m_num++;

  return true;
}

void CTexMapSide::Get( TTexMapVertex** v1, TTexMapVertex** v2, int index )
{
  *v1 = m_side[index].v1;
  *v2 = m_side[index].v2;
}

bool CTexMapSide::Intersection( int index, double y, double* x, double* sx, double* sy )
{
  TTexMapVertex *v1,*v2;
  Get( &v1,&v2, index );

  // 横線だった場合は弾く
  if (v1->dy == v2->dy) return false;
  
  // 頂点とスキャンが交差しないように、念のため誤差(?)を作る
  y += 0.00123456789;

  // 辺の範囲内?
  if ( ((y <= v1->dy) && (y >= v2->dy)) ||
       ((y >= v1->dy) && (y <= v2->dy)) )
  {
    // 上下端と交差
    if (y == v1->dy)
    {
      *x  = v1->dx;
      *sx = v1->sx;
      *sy = v1->sy;
      return true;
    }
    if (y == v2->dy)
    {
      *x  = v2->dx;
      *sx = v2->sx;
      *sy = v2->sy;
      return true;
    }

    if (v2->dy < v1->dy) SWAP( &v1, &v2 );

    double m = (y - v1->dy) / (v2->dy - v1->dy);
    *x  = v1->dx + m*(v2->dx - v1->dx);
    *sx = v1->sx + m*(v2->sx - v1->sx);
    *sy = v1->sy + m*(v2->sy - v1->sy);

    return true;
  }
  
  return false;
}
Powered by Google Project Hosting