星の描画について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Ultimate
記事: 38
登録日時: 14年前
住所: 埼玉県
連絡を取る:

星の描画について

#1

投稿記事 by Ultimate » 14年前

星を使ってゲームを作りたいと思っているのですが、最初が傾いて表示されます。
頂点が真上を向くようにしたいのですが、どうしたらいいでしょうか?
自分で書いてみたコードを載せます。

コード:

#include "DxLib.h"
#include <math.h>
#define PI 3.14159265358979 //円周率の設定

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
	ChangeWindowMode(TRUE);
    SetBackgroundColor(0,0,0);
    SetWindowSizeChangeEnableFlag(TRUE) ;
    SetMainWindowText("星の描画");
	DxLib_Init();
	SetDrawScreen(DX_SCREEN_BACK);
    
    double radian=0,x1=0,y1=0,x2=0,y2=0;//元の傾き・座標の変数
    double starlong=50.0;//星のサイズ
    int i,n=0;
    int White=GetColor(255,255,255);
    
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
        SetBackgroundColor(0,0,0);
        
        for(i=0;i<5;i++){
            x1=320+cos(radian+((PI*2*i)/5))*starlong;//片方のx座標
            y1=240+sin(radian+((PI*2*i)/5))*starlong;//片方のy座標
            if(i==0||i==1||i==2)n=i+2;//もう片方の座標計算用
            if(i==3||i==4)n=i-3;//もう片方の座標計算用
            x2=320+cos(radian+((PI*2*n)/5))*starlong;//もう片方のx座標
            y2=240+sin(radian+((PI*2*n)/5))*starlong;//もう片方のy座標
            DrawLine(x1,y1,x2,y2,White);.//描画
            starlong+=0.1;//だんだんおおきく
            /*radian+=2+PI/720; 回転させる。今回の場合、元の状態での傾きが分かりにくくなるのでコメントの中にいれて動作しないようにしておく。*/
        }
        
        ScreenFlip();
    }
    
    WaitKey();
    return 0;
}
これで頂点が真上にあって、だんだん大きくなっていくようになる予定だったのですが、なぜすこし傾いて表示されるのでしょうか?
回答お願いします。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 星の描画について

#2

投稿記事 by ISLe » 14年前

sin,cosの0度は真右です。
頂点を真上にするには(画面は下が正方向なので)-90度回転させる必要があります。

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 星の描画について

#3

投稿記事 by bitter_fox » 14年前

ずれの原因はISLeさんが既に仰っているので、別のことを。

コード:

        for(i=0;i<5;i++){
                
            starlong+=0.1;//だんだんおおきく
            /*radian+=2+PI/720; 回転させる。今回の場合、元の状態での傾きが分かりにくくなるのでコメントの中にいれて動作しないようにしておく。*/
        }
これだと、一直線を描画するたびにstarlongが大きくなってしまい、次の直線の長さが変わることになると思うのですが・・・(と言っても非常に僅かなのでそんなに気にすることでもないような気がしますが・・・)

また、

コード:

#define PI 3.14159265358979 //円周率の設定
3.14...とコメントの間に全角スペースが入っていて、コンパイルすると全角スペースも一緒に置換されてしまいます。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 星の描画について

#4

投稿記事 by ISLe » 14年前

せっかくなので。
VCで円周率の定義されたマクロM_PIを使えるようにする方法があります。

コード:

#define _USE_MATH_DEFINES
#include <math.h>

アバター
Ultimate
記事: 38
登録日時: 14年前
住所: 埼玉県
連絡を取る:

Re: 星の描画について

#5

投稿記事 by Ultimate » 14年前

回答ありがとうございました。

まだ学校でも三角関数は出てなく、弾幕で全方向のショットと自機狙いをつくるためだけに軽く勉強した程度だったので、知りませんでした。

コメントの欄の全角についてはこの掲示板にソースを張り付けた後に書いたので気づきませんでした...
今後気をつけたいと思います。

無事成功しました。
解決にします。

閉鎖

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