C言語関係掲示板

過去ログ

No687 正四面体の体積

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

至急!!
投稿者---AJ(2003/07/03 19:02:59)


先週、質問したものですがチェックをお願いします。
今日中にださなくてはいけないのです。


三次元ベクトルを扱う関数の定義ファイル vector.hを使い

三次元空間内の4点A B C Dを頂点とする
四面体の体積を求める関数を考え、

一辺10の立方体の内部に整数値を座標にした点を4つランダムに
生成し、その4点を頂点にした四面体体積および四面体が立方体の
中心を含むか含まないかを表示するプログラムを作ったのですが
どこか間違っているところがあったらおしえてください。

なお内部と外部の判断のしかたは
四面体ABCDの各面と中心の点Pにより形成される4つの四面体PABC,
PBCD,PCBD,PDABの体積の和が、元の四面体の体積よりも
大きい場合にはPは四面体の外部にある。
と考えました。


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "vector.h"

int main(int argc, char **argv)
{
int i;
double V, V1, V2, V3, V4, Vs;
Vec3 v[9], va, vb, vc, vd, vp, v1, v2, v3, v4;

srand(time(NULL));
for (i = 0; i < 4; i++){
v[i].x = rand() % 10;
v[i].y = rand() % 10;
v[i].z = rand() % 10;
printf("v[%d].x = %f, v[%d].y = %f, v[%d].z = %f\n",
i, v[i].x, i, v[i].y, i, v[i].z);

}
vp.x = 5;
vp.y = 5;
vp.z = 5;

va = vsub(v[1],v[0]);
vb = vsub(v[2],v[0]);
vc = vsub(v[3],v[0]);
vd = vsub(v[0],v[3]);

v1 = vsub(v[1],vp);
v2 = vsub(v[2],vp);
v3 = vsub(v[3],vp);
v4 = vsub(v[4],vp);

V = fabs(viprod(voprod(va,vb),vc))/6;
V1 = fabs(viprod(voprod(v1,v2),v3))/6;
V2 = fabs(viprod(voprod(v2,v3),v4))/6;
V3 = fabs(viprod(voprod(v3,v2),v4))/6;
V4 = fabs(viprod(voprod(v4,v1),v2))/6;

Vs = V1 + V2 + V3 + V4 - V;

if (V = 0)
printf("体積は0です。\n");
else if(Vs > 0 && V > 0)
printf("体積は%fで、外部です。 \n", V);
else if(Vs = 0 && V > 0)
printf("体積は%fで、内部です。 \n", V);

return(0);
}

 





No.7982

Re:至急!!
投稿者---たいちう(2003/07/03 20:13:57)


> Vs = V1 + V2 + V3 + V4 - V;

なるほど。体積はこうやって使えるのか。思いつかなかった。
タイトルが気に入らないからほっとこうかと思ったけど、
判定方法が良いので少しだけアドバイス。

コンパイルして実行してみましたか?
実行しても間違っているのがわからないんですか?
前にも誰か書いてたけど、"vector.h"を持ってない人は、
コンパイルすることもできないんだよ。
(間違ってるとは確信してるんだけどね。"vector.h"がないから、
C言語の基本を、としかアドバイスできないや)

No.7986

Re:至急!!
投稿者---AJ(2003/07/03 23:22:11)


>> Vs = V1 + V2 + V3 + V4 - V;
>
>なるほど。体積はこうやって使えるのか。思いつかなかった。
>タイトルが気に入らないからほっとこうかと思ったけど、
>判定方法が良いので少しだけアドバイス。
>
>コンパイルして実行してみましたか?
>実行しても間違っているのがわからないんですか?
>前にも誰か書いてたけど、"vector.h"を持ってない人は、
>コンパイルすることもできないんだよ。
>(間違ってるとは確信してるんだけどね。"vector.h"がないから、
>C言語の基本を、としかアドバイスできないや)


失礼な題名に対してアドバイスをありがとうございました。
感謝しています。

No.7984

Re:至急!!
投稿者---かずま(2003/07/03 22:38:39)


題名がだめ。「正四面体の体積」でよいのに。
ソースの添付の仕方がだめ。こんなプログラムは読みたくない。
なぜ、「掲示板ご利用上の注意」に従わないのですか。
納得のいく答えをお聞かせください。

さて、間違っているのは次の行です。

> if (V = 0)

> else if(Vs = 0 && V > 0)

Cでは、比較と代入は演算子が異なります。

No.7987

Re:至急!!
投稿者---AJ(2003/07/03 23:24:41)


>題名がだめ。「正四面体の体積」でよいのに。
>ソースの添付の仕方がだめ。こんなプログラムは読みたくない。
>なぜ、「掲示板ご利用上の注意」に従わないのですか。
>納得のいく答えをお聞かせください。
>
>さて、間違っているのは次の行です。
>
>> if (V = 0)
>
>> else if(Vs = 0 && V > 0)
>
>Cでは、比較と代入は演算子が異なります。

貴重なアドバイスありがとうございました。
タイトルには気をつけたいとおもいます。
大変失礼しました。