本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[QC20]_setwindow 関数でデカルト座標系の描画が不正

文書番号: 403059

最終更新日: 1998/03/23


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP403059

概要

この資料は、_setwindow 関数でデカルト座標指定時の不正な描画について説明した
ものです。

詳細

デカルト座標 (Y 軸下から上) 指定時、描画方向は下から上になりますが、Y座標の原点 が正しく設定されないため正しい描画が行われません。

再現プログラム

  #include <conio.h>
  #include <graph.h>
  void main()
  {
    short inv;
    for( inv=0; inv<2; inv++ ){
      _setvideomode(_98RESSCOLOR);
      _rectangle(_GBORDER,120,100,520,300);
      _setviewport(120,100,520,300);
      _setwindow(inv,-50.0F ,-10.0F,50.0F,40.0F);
      _moveto_w(-40.0F,-5.0F);
      _lineto_w(40.0F,35.0F);
      getch();
      _setvideomode(_DEFAULTMODE);
    }
  }

原因

_setwindow 関数の障害です。

対処方法

画面座標系(Y 軸上から下) をお使いいただくか、下記の様なデカルト座標を画面座
標系に変換する関数を作成・利用する事で回避できます。

対策プログラム

  #include <conio.h>
  #include <graph.h>
  #include <stdlib.h>
  short finv;                /* 座標系を保存する変数 */
  double ymx,ymn;            /* 上限、下限を保存する変数 */
  double _ycv(double y)
  {
      double yt1,yt2;
      if( finv == 0 )
        return( y );
      else{
        yt1 = min( y, ymx );   /* 上限チェック */
        yt2 = max( yt1,ymn );  /* 下限チェック */
        return( ymx - yt2 );
      }
  }
  short _setwindow2(short inv,double wx1,double wy1,double wx2,double wy2)
  {
      short stat;
      ymx=max( wy1, wy2 );  /* 上限値保存 */
      ymn=min( wy1, wy2 );  /* 下限値保存 */
      finv=inv;             /* 座標系保存 */
      if( finv == 0 )
        stat = _setwindow( finv,wx1,      wy1,wx2,     wy2  );
      else
        stat = _setwindow(    0,wx1,_ycv(wy1),wx2,_ycv(wy2) );
      return( stat );
  }
  void main()
  {
    short inv;
    for( inv=0; inv<2; inv++ ){
      _setvideomode( _98RESSCOLOR );
      _rectangle( _GBORDER,120,100,520,300 );
      _setviewport( 120,100,520,300 );
      _setwindow2( inv,-50.0F ,-10.0F,50.0F,40.0F );
      _moveto_w(-40.0F,_ycv(-5.0F));
      _lineto_w( 40.0F,_ycv(35.0F));
      getch();
      _setvideomode( _DEFAULTMODE );
    }
  }

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBBUG KB403059
Technology: kbAudDeveloper kbCCompSearch kbQC200 kbZNotKeyword3

inserted by FC2 system