- 締切済み
初心者の質問で申し訳ありません。
初心者の質問で申し訳ありません。 点の座標情報(x,y,z)が入っているテキストデータを読み込み、 それぞれの点同士が距離r以内に存在するか、しないかを判定する プログラムについて教えていただきたいです。 距離r以内に他の点が存在しない点は消去、 距離r以内に他の点が存在している点は書き出し、という流れを考えています。 どなたかご教授お願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6290)
回答No.5
- magicalpass
- ベストアンサー率58% (378/648)
回答No.4
- akayoroshi
- ベストアンサー率50% (46/91)
回答No.3
- edomin7777
- ベストアンサー率40% (711/1750)
回答No.2
- magicalpass
- ベストアンサー率58% (378/648)
回答No.1
補足
回答していただきありがとうございます。 今のところ計算量はかなり耐えうる環境なので大丈夫そうなんですが、 xだけですと、3次元を考えると除ききれないような気がしました。 以下にプログラムの一部を載せました。 この流れのなかで、/*点から半径rの球に含まれる点があるのかないのか判定する*/という部分でつまずいています。。 printf("memory20100705\n"); double xx,yy,zz,rr,gg,bb,pp,qq ; double* xx = (double*)malloc(number+1*sizeof(double)); double* yy = (double*)malloc(number+1*sizeof(double)); double* zz = (double*)malloc(number+1*sizeof(double)); double* rr = (double*)malloc(number+1*sizeof(double)); double* gg = (double*)malloc(number+1*sizeof(double)); double* bb = (double*)malloc(number+1*sizeof(double)); double* pp = (double*)malloc(number+1*sizeof(double)); double* qq = (double*)malloc(number+1*sizeof(double)); FILE* inifile = fopen("pos.txt", "r"); if(inifile==NULL) { printf("pos.txt is nothing!!"); return 0; } FILE* outfile = fopen("outpos.txt", "w"); if(outfile==NULL) { printf("outpos.txt is nothing!!"); return 0; } FILE* outfilefly = fopen("outposfly.txt", "w"); if(outfilefly==NULL) { printf("outposfly.txt is nothing!!"); return 0; } for ( int ii = 0, ii < number, ii ++ ) { fscanf( inifile,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf \n", &xx[ii], &yy[ii], &zz[ii], &rr[ii], &gg[ii], &bb[ii], &pp[ii], &qq[ii] ); } { printf("%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf \n", xx[ii], yy[ii], zz[ii], rr[ii], gg[ii], bb[ii], pp[ii], qq[ii]); return 0; } /*点から半径rの球に含まれる点があるのかないのか判定する*/ { int flag, r; flag = 1; if ( 0.5 <= sqrt((ii.xx-jj.xx)*(ii.xx-jj.xx)+(ii.yy-jj.yy)*(ii.yy-jj.yy)+(ii.zz-jj.zz)*(ii.zz-jj.zz)) flag = 0; break; } if (flag ==1){ fprintf(outfile,"%f,%f,%f,%f,%f,%f,%f,%f \n", xx, yy, zz, rr, gg, bb, pp, qq); } else { fprintf(outfilefly,"%f,%f,%f,%f,%f,%f,%f,%f \n", xx, yy, zz, rr, gg, bb, pp, qq); } fclose(inifile); fclose(outfile); fclose(outfilefly); printf("Normal END \n"); return 0; }