角度のある楕円を書きたいのですが・・・

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

角度のある楕円を書きたいのですが・・・

#1

投稿記事 by ptepe2h » 9年前

龍神録プログラミングの館を参考にさせてもらって、シューティングゲームを作ってます。
それで質問なのですが、角度のある楕円はどうやって作るのでしょうか。
例えば、垂直の楕円なら

コード:

for(i=-50;i<=50;i++){
	double ang=PI/50*i;//ang=0からPI/50*iに訂正
	if((k=search_boss_shot())!=-1){
		boss_shot.bullet[k].col   = col;//弾の色
		boss_shot.bullet[k].x     = boss.x+cos(ang)*50;
		boss_shot.bullet[k].y     = boss.y+sin(ang)*200;
		boss_shot.bullet[k].knd   = 8;//弾の種類
		boss_shot.bullet[k].angle = PI/4;//角度
		boss_shot.bullet[k].flag  = 1;
		boss_shot.bullet[k].cnt   = 0;
		boss_shot.bullet[k].spd	  = 0;
		boss_shot.bullet[k].state = 2;
		se_flag[0]=1;
	}
}
こう
平行なら
boss_shot.bullet[k].x = boss.x+cos(ang)*200;
boss_shot.bullet[k].y = boss.y+sin(ang)*50;
こうすればいいことはわかります
しかし、これが角度15や45度の楕円の場合、どうすれば綺麗な楕円が書ける(弾を配置できる)のでしょうか。
いくら考えても解りません、どなたかご教授ください。
最低限、楕円でなくてもいいです。楕円の半分、ひしゃげた曲線が自由な角度で書ければいいのですが……。


kino

Re: 角度のある楕円を書きたいのですが・・・

#3

投稿記事 by kino » 9年前

>最低限、楕円でなくてもいいです。楕円の半分、ひしゃげた曲線が自由な角度で書ければいいのですが……。
きれいな形でなくていいなら
cos(ang)*200 sin(ang+PI/10)*50 数値をずらしたり 
cos(ang)*200 sin(ang*2+PI/10)*50 倍率を変えたり
違う数値にすればいろんな楕円が描けますよ

ptepe2h
記事: 7
登録日時: 10年前

Re: 角度のある楕円を書きたいのですが・・・

#4

投稿記事 by ptepe2h » 9年前

>h2so5さん
へー、こういうのがあるんですか。文系の自分には思いつかないです。他にもいろいろ使えそうですね。
とりあえず、以下のような感じで実装できそうです。感謝です。

コード:

if(t==0){
    for(i=0;i<100;i++){
        double ang=PI/50*i;
        if((k=search_boss_shot())!=-1){
            if(i==25)
                boss_shot.bullet[k].col   = 5;//焦点の色
            else
            boss_shot.bullet[k].col   = 1;
            boss_shot.bullet[k].x     = cos(ang)*50;//座標
            boss_shot.bullet[k].y     = sin(ang)*200;
            boss_shot.bullet[k].knd   = 8;//弾の種類
            boss_shot.bullet[k].angle = bossatan2();//角度
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].spd	  = 0;
            boss_shot.bullet[k].state = 0;
            se_flag[0]=1;
        }
    }
}
for(i=0;i<BOSS_BULLET_MAX;i++){
    if(boss_shot.bullet[i].flag>0){
        int st=boss_shot.bullet[i].state;
        int cnt=boss_shot.bullet[i].cnt;
        double x=boss_shot.bullet[i].x,y=boss_shot.bullet[i].y;
        if(st==0){
            if(cnt==0){
                double ang=bossatan2()+PI+PI/2;
  	   boss_shot.bullet[i].x=boss.x+cos(ang)*x-sin(ang)*y;
	   boss_shot.bullet[i].y=boss.y+sin(ang)*x+cos(ang)*y;
	   boss_shot.bullet[i].angle=bossatan2();
            }
        }
    }
}
>kinoさん
確かにこれでも可能ですけど、逐一手動で書きこまなきゃいけないのはムリです。
ゲーム内で自動で計算してもらわないといけないので……。
でも、ありがとうございました。

閉鎖

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