C言語関係掲示板

過去ログ

No748 glibw32で画面外の座標を描画

[戻る] [ホームページ]
No.9298

glibw32
投稿者---For to next(2003/09/14 23:41:32)


これ実行すると画面全体がぐちゃぐちゃになっちゃうんですけど、
何ででしょうか。変数の桁あふれですか?
#include<stdio.h>
#include<math.h>
#include<glibw32.h>

double f1 (double);

int main(void){
	double x,p,q,y1,y2,a;
	double h=0.001;
	ginit();		//グラフィック開始
	
	printf("接線を描きます。");
	GRAPH g;
	g.window(-16,-10,16,10);

	for(x=-16;x <= 16;x = x+0.01){
		cls();
		g.line(-16,0,16,0);
		g.line(0,10,0,-10);
		for(p=-16;p <= 16;p = p+0.01){
			q = f1(p);
			g.pset(p,q,RED);
		}
		y1 = f1(x);
		y2 = f1(x+h);
		a=(y2-y1)/h;
		g.line(x+10,y1+10*a,x-10,y1-10*a,GREEN);
	}
	
	gend();		//グラフィック終わり
	
	return 0;
}

double f1 (double x)
{
	double y=pow(x,2);
	
	return y;
}


No.9301

Re:glibw32
投稿者---かずま(2003/09/15 02:13:01)


> これ実行すると画面全体がぐちゃぐちゃになっちゃうんですけど、
> 何ででしょうか。変数の桁あふれですか?

表示が速すぎるだけじゃないんでしょうか。
     g.line(x+10,y1+10*a,x-10,y1-10*a,GREEN);
の後に、Sleep(10); または usleep(10000); を入れてみた結果を教えてください。
ヘッダファイルは、<windows.h> または <unistd.h> でしょう。


No.9305

補足
投稿者---For to next(2003/09/15 12:05:28)


すみません説明不足の点を補足します。
 まず<glibw32>はここでも紹介されている。
http://www.asahi-net.or.jp/~uc3k-ymd/Glib32/glibw32.html
のライブラリです。
 このプログラムはy=x^2のグラフ上の点における接線を左から右に描画していくプログラムです。
 そして、症状は、最初のうちは接線が正しく描がかれているのですが(速度も問題なく)、最後のほう(大体y=x^2のグラフの2/3くらいの接線を描き終わるころ)になと、コンソール内だけでなく、画面全体の表示がぐちゃぐちゃになってしまいwindows全体がフリーズしてしまうというものです。
 かずまさんのアドバイス早速実践してみましたが、接線のアニメーションが遅くなっただけで、やっぱり後半ぐらいになると同じような症状がおこりました。

No.9309

Re:補足
投稿者---たか(2003/09/15 12:43:09)


もしかしたらクリッピング処理が必要なのかもしれません。
ビデオドライバや解像度によっては画面外の座標が与えられると
その通りに計算されるアドレスにアクセスしてしまい、Windows
が落ちる事があり得ます。

No.9314

感動した!
投稿者---For to next(2003/09/15 14:30:16)


うまくいきました。ありがとうございました。
原因はまさにその通りだったようです。
グラフィックはBASICでやっただけなので、そんなことは思いつきもしませんでした。
ちなみにGLIBW32.hのなかには、ビューボードを定義する関数があり、
それを使っていれば、このようなことは気にしなくても大丈夫なようです。

皆さん、ありがとうございました。