画像のような曲線を描きたいです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sadora3
記事: 175
登録日時: 11年前

画像のような曲線を描きたいです

#1

投稿記事 by sadora3 » 8年前

画像
上の画像のような曲線を描きたいです。それをキー入力で真っすぐの状態と曲がった状態に自由に変化させたいです。
とりあえず下のようなコードを書いてみましたが、以下のような問題点があります。
1、初期状態(画像の左側の状態)では、線が真っすぐじゃない
2、キー入力で線を曲げていくと、等速ではなく加速する(等速で移動して欲しい)

どうすれば、上の2つの問題を解決できるのでしょうか?

OS:Windows10
コンパイラ:VisualStudio2010
言語:C

コード:

#include"DxLib.h"

#define SPEED (50)
#define ADD (30)

int f(int x, int V){
	return -(x) * (x) / (V);
}

int ConvertX(int X){	return X + 400;	}
int ConvertY(int Y){	return -Y + 600;	}

int ProcessLoop(){
	if(ProcessMessage() != 0){  return 0;  }
	if(ClearDrawScreen() != 0){ return 0;  }
	return 1;
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	ChangeWindowMode(TRUE);
	SetGraphMode(800, 600, 16);
	if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0){   return -1;  }

	int Value = 10000;

	while(ProcessLoop() && !CheckHitKey(KEY_INPUT_ESCAPE)){

		if(CheckHitKey(KEY_INPUT_RIGHT) && Value < 10000){
			Value += SPEED;
		}

		if(CheckHitKey(KEY_INPUT_LEFT) && Value > 1550){
			Value -= SPEED;
		}

		for(int x = 0; x < 600; x += ADD){
			DrawLine(ConvertX(f(x, Value)), ConvertY(x), ConvertX(f(x + ADD, Value)), ConvertY(x + ADD), GetColor(0,255,0));
		}

		DrawFormatString(700, 10, GetColor(255,255,255), "Value:%d", Value);

		ScreenFlip();
	}
	DxLib_End();
	return  0;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 画像のような曲線を描きたいです

#2

投稿記事 by みけCAT » 8年前

今のコードでは曲がり具合がパラメータに反比例するので、完全に真っ直ぐにはならないし、パラメータを小さくしていくと曲がり具合の増え方が大きくなっていくのは当たり前ですね。
というわけで、とりあえず曲がり具合がパラメータに比例するようにしてみたらどうですか?

コード:

#include"DxLib.h"

#define SPEED (5)
#define ADD (30)

int f(int x, int V){
	return -(x) * (x) * (V) / (600 * 600);
}

int ConvertX(int X){	return X + 400;	}
int ConvertY(int Y){	return -Y + 600;	}

int ProcessLoop(){
	if(ProcessMessage() != 0){  return 0;  }
	if(ClearDrawScreen() != 0){ return 0;  }
	return 1;
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	ChangeWindowMode(TRUE);
	SetGraphMode(800, 600, 16);
	if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0){   return -1;  }

	int Value = 0;

	while(ProcessLoop() && !CheckHitKey(KEY_INPUT_ESCAPE)){

		if(CheckHitKey(KEY_INPUT_RIGHT) && Value > 0){
			Value -= SPEED;
		}

		if(CheckHitKey(KEY_INPUT_LEFT) && Value < 400){
			Value += SPEED;
		}

		for(int x = 0; x < 600; x += ADD){
			DrawLine(ConvertX(f(x, Value)), ConvertY(x), ConvertX(f(x + ADD, Value)), ConvertY(x + ADD), GetColor(0,255,0));
		}

		DrawFormatString(700, 10, GetColor(255,255,255), "Value:%d", Value);

		ScreenFlip();
	}
	DxLib_End();
	return  0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sadora3
記事: 175
登録日時: 11年前

Re: 画像のような曲線を描きたいです

#3

投稿記事 by sadora3 » 8年前

おお、すごいです!
この掲示板の人たちにはいつもお世話になっています。とても感謝しています。
本当にありがとうございました!
私もいつかは回答する側に立ちたいです。

閉鎖

“C言語何でも質問掲示板” へ戻る