左オペランドには型 'double' が指定されていますについて(初心者)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
とけい

左オペランドには型 'double' が指定されていますについて(初心者)

#1

投稿記事 by とけい » 9年前

DxlibとVCを使ってワイヤーフレームで簡単な球体を描画したいのですが、
サンプルとして十進BASIC で書かれた http://6317.teacup.com/basic/bbs/448 を見つけました。

Cに移植しようと、以下のプログラムを書いたところで、
「左オペランドには型 'double' が指定されています。」のエラーが発生しました。

int、double、floatがごちゃごちゃになっているのが何となくわかるのですが、
どのように修正すべきかが解りません。何卒ご教示の程、宜しくお願いいたします。

コード:

        // 描画先画面を裏画面にセット
	SetDrawScreen(DX_SCREEN_BACK);

	{
		double a, b, x,y,r,x1, y1, x2, y2,angle;

		for (int t = 0; t < 90; t += 15) {
			angle =t * (DX_PI / 180);
			a = sin(angle); //端付近:密、中央付近:疎
			b = 1;
			x = 100, y = 100, r = 16;

     
			for (int i = 0; i < 360; i++) { //経線 ※楕円を描く  
				angle = i * (DX_PI / 180);
				x1 =x+ r * a*cos(angle);
				y1 =y+ r * b*sin(angle);
				angle = (i+1) * (DX_PI / 180);
				x2 =x+ r * a*cos(angle);
				y2 =y+ r * b*sin(angle);
				DrawLine(x1, y1, x2, y2, GetColor(255, 0, 255));

			}
		}

		for (int i = -180; i< 180; i =i+ 10) { // 緯線 ※水平線を描く
			angle = i * (DX_PI / 180);
			y1 = y + r *sin(angle); //角度を等分割する
			x1 = x + r *sqrt(1-y1^2);     //<--------------「左オペランドには型 'double' が指定されています。」
			DrawLine(-x1, y1, x1, y1, GetColor(255, 0, 255));
		}
		
		ScreenFlip();
		WaitKey();
	}

以下が参考にしたコード(十進BASIC http://6317.teacup.com/basic/bbs/448)です。

コード:

!経線と緯線と使って、球体をワイヤーフレームで描画する

SET WINDOW -2,2,-2,2

FOR t=0 TO 90 STEP 15 !角度を等分割する
   LET a=SIN(RAD(t)) !端付近:密、中央付近:疎
   LET b=1
   FOR i=0 TO 360 !経線 ※楕円を描く
      LET x=a*COS(RAD(i))
      LET y=b*SIN(RAD(i))
      PLOT LINES: x,y;
   NEXT i
   PLOT LINES
NEXT t

FOR i=-180 TO 180 STEP 10 !緯線 ※水平線を描く
   LET y=SIN(RAD(i)) !角度を等分割する
   LET x=SQR(1-y^2) !極付近:密、0度付近:疎
   PLOT LINES: -x,y; x,y
NEXT i
PLOT LINES

END


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

Re: 左オペランドには型 'double' が指定されていますについて(初心者)

#2

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

C言語の^演算子はXOR演算を表し、実数型はオペランドに取れません。
素直にy1*y1と書くといいでしょう。
オフトピック
DXライブラリを使っているようだが、codeタグでも明示しているし本当にC++ではなくC言語を使っているのだろうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

とけい

Re: 左オペランドには型 'double' が指定されていますについて(初心者)

#3

投稿記事 by とけい » 9年前

いつもご回答ありがとうございます。

なんと、^はべき乗じゃないのですね。
べき乗は pow(x,y)ですか・・・。

変な思い込みのせいで永遠と気づかなかった気がします。。
y1*y1で無事エラー解消されました、ありがとうございました。

あっ、C++(cpp) ですね。
(正直、違いを意識出来ていません汗)

閉鎖

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