新しく発言する  EXIT  インデックスへ

3Dファイルを作る


  3Dファイルを作る しばっち 2008/04/05 19:37:37 
  続き しばっち 2008/04/05 19:38:54 
  │└続き しばっち 2008/04/05 19:39:37 
  │ └球面調和関数 しばっち 2008/04/05 19:43:53 
  │  └続き しばっち 2008/04/05 19:44:26 
  │   └シェルピンスキー三角形 しばっち 2008/04/05 19:45:04 
  │    └メタセコイア(Metasequoia)本体で読み込ん... 山中和義 2008/04/06 11:40:43 
  DXFファイルを作る しばっち 2008/04/06 18:38:29 
  WRLファイルを作る しばっち 2008/04/06 18:39:11 
  POVファイルを作る しばっち 2008/04/06 18:40:01 
   └参考.直接POV-Rayでの記述で曲面がなめらか... 山中和義 2008/04/07 13:38:24  (修正1回)

  3Dファイルを作る しばっち 2008/04/05 19:37:37   ツリーへ
3Dファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:37:37
ご注意


実行後大量のファイルが生成されます。
別途外部アプリケーション等必要です。
ファイル読込後、図形が表示されない時は
原点付近を拡大(マウスでグリグリ)してみて下さい。

(お薦め)
http://www.vector.co.jp/soft/win95/art/se280377.html

(参考)
http://www.metaseq.net/metaseq/index.html

参考文献
「Windowsで見る関数グラフィックス」 森北出版

LET N=51
LET XS=-3
LET XE=3
LET ZS=-3
LET ZE=3
LET YS=-6
LET YE=6
FOR MODE=0 TO 41
LET F$="3D陽関数" & STR$(MODE) & ".MQO"
OPEN #1:NAME F$
PRINT #1:"Metasequoia Document" !'ヘッダー部はコピペ
PRINT #1:"Format Text Ver 1.0"
PRINT #1
PRINT #1:"Scene {"
PRINT #1:CHR$(9);"pos 0.0000 0.0000 1500.0000"
PRINT #1:CHR$(9);"lookat 0.0000 0.0000 0.0000"
PRINT #1:CHR$(9);"head -0.5236"
PRINT #1:CHR$(9);"pich 0.5236"
PRINT #1:CHR$(9);"ortho 0"
PRINT #1:CHR$(9);"zoom2 5.0000"
PRINT #1:CHR$(9);"amb 0.250 0.250 0.250"
PRINT #1:CHR$(9);"}"
PRINT #1:"Object ";CHR$(34);"obj";CHR$(34);" {"
PRINT #1:CHR$(9);"depth 0"
PRINT #1:CHR$(9);"folding 0"
PRINT #1:CHR$(9);"scale 1.000000 1.000000 1.000000"
PRINT #1:CHR$(9);"rotation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"translation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"visible 15"
PRINT #1:CHR$(9);"locking 0"
PRINT #1:CHR$(9);"shading 1"
PRINT #1:CHR$(9);"facet 59.5"
PRINT #1:CHR$(9);"color 0.898 0.498 0.698"
PRINT #1:CHR$(9);"color_type 0"
PRINT #1:CHR$(9);"vertex ";STR$(N*N);" {"
FOR I=0 TO N-1
LET Z=ZS+(ZE-ZS)/(N-1)*I
FOR J=0 TO N-1
LET X=XS+(XE-XS)/(N-1)*J
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:CHR$(9);FORM$(X);" ";FORM$(Y);" ";FORM$(Z) !'座標データ
NEXT J
NEXT I
PRINT #1:CHR$(9);"}"
PRINT #1:CHR$(9);"face ";STR$((N-1)*(N-1));" {"
FOR I=0 TO N-2
FOR J=0 TO N-2
PRINT #1:CHR$(9);"4 V(";STR$(J+N*I);" ";STR$(J+1+N*I);" ";STR$(J+1+N*(I+1));" ";STR$(J+N*(I+1));")" !'メッシュデータ
NEXT J
NEXT I
PRINT #1:CHR$(9);"}"
PRINT #1:"}"
PRINT #1:"Eof"
CLOSE #1
NEXT MODE
END

EXTERNAL FUNCTION FORM$(X)
LET FORM$=LTRIM$(USING$("---%.####",X))
END FUNCTION
  続き しばっち 2008/04/05 19:38:54   ツリーへ
Re: 3Dファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:38:54
続き


EXTERNAL FUNCTION FUNC(MODE,X,Y)
SELECT CASE MODE
CASE 0
LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
LET FUNC=X*Y*(X^2-Y^2)
CASE 2
LET FUNC=(X^2-Y^2)/2
CASE 3
LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
IF (X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
LET FUNC=2
ELSE
LET FUNC=0
END IF
CASE 5
LET Z=4-X^2-Y^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 6
LET Z=2*(X^2+Y^2-3)
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 7
LET FUNC=EXP(-Y)*SIN(3*X)
CASE 8
LET FUNC=MIN(3,X^2+Y^2-4)
CASE 9
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,Y^2)
CASE 10
IF X=0 AND Y=0 THEN
LET FUNC=0
ELSE
LET FUNC=X*Y/(X^2+Y^2)
END IF
CASE 11
LET FUNC=LOG(X^2+Y^2+.1)
CASE 12
LET FUNC=MAX(X^2+Y^2-(X^2+Y^2+Y)^2,-2)
CASE 13
LET FUNC=MIN(MAX(X^3-3*X*Y+Y^3,-4),0)
CASE 14
LET FUNC=SIN(X)*SIN(Y)*SIN(X+Y)
CASE 15
LET FUNC=COS(PI*X)*COS(PI*Y)
CASE 16
LET FUNC=COS(3*X*Y)
CASE 17
LET FUNC=SQR(COS(X)^2+SINH(Y)^2)
CASE 18
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,.5*(1.5*X-Y)^2)
CASE 19
LET Z=1-(SQR(X^2+Y^2)-1.5)^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 20
LET FUNC=6-4*SQR(X^2+Y^2)
CASE 21
LET Z=1-X^2
LET ZZ=1-Y^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
LET FUNC=MAX(Z,ZZ)
CASE 22
LET Z=1-(SQR(X^2+Y^2)-1.5)^2
LET ZZ=.7-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
LET FUNC=MAX(Z,ZZ)
CASE 23
LET FUNC=EXP(-X^2+Y^2)
CASE 24
LET Z=1-X^2
IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
LET FUNC=MIN(Z,.25*(Y^2-2.5)^2)
CASE 25
IF X=0 OR Y=0 THEN
LET FUNC=1
ELSE
LET FUNC=SIN(X*Y)/X/Y
END IF
CASE 26
LET Z=1-.25*(Y-SIN(X))^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 27
LET FUNC=2*ABS(COS(X*PI)*COS(Y*PI))^3
CASE 28
LET FUNC=(X^3+Y^3)/10
CASE 29
LET FUNC=SQR(X^2+(Y+1)^2)*SQR(X^2+(Y-1)^2)
CASE 30
LET FUNC=X^3-X*Y^2
CASE 31
LET FUNC=SIN(X*Y)
CASE 32
LET FUNC=3*EXP(-.5*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))*COS(PI*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))
  │└続き しばっち 2008/04/05 19:39:37   ツリーへ
Re: 続き  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:39:37
続き


CASE 33
LET FUNC=EXP(.5*X)*SIN(Y)
CASE 34
IF X>0 AND Y>0 THEN
LET FUNC=0
ELSE
LET FUNC=6*EXP(-X^2-Y^2)*(X^2+Y^2)
END IF
CASE 35
LET Z=4-(X-2*INT((X+1)/2))^2-(Y-2*INT((Y+1)/2))^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 36
LET FUNC=SIN(Y)+SIN(2*X)+SIN(3*Y)+SIN(4*X)+SIN(5*Y)
CASE 37
LET FUNC=COS(X)+COS(2*Y)+COS(3*X)+COS(4*Y)+COS(5*X)
CASE 38
LET FUNC=SIN(X)-COS(Y)+SIN(3*X)+COS(3*Y)+SIN(5*X)-COS(5*Y)
CASE 39
LET FUNC=(X^2+SQR(2)*X*Y+Y^2-4)*(X^2-SQR(2)*X*Y+Y^2-4)
CASE 40
LET FUNC=(Y^2-X^4+X^6)*(X^2-Y^4+Y^6)
CASE 41
LET FUNC=SIN(2*X)*COS(Y)/2
END SELECT
END FUNCTION
  │ └球面調和関数 しばっち 2008/04/05 19:43:53   ツリーへ
Re: 続き  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:43:53
球面調和関数



OPTION ARITHMETIC COMPLEX
LET N=50
LET MODE=1
!'LET MAXLEVEL=5
INPUT PROMPT "(L>=M,L>=0) L,M=":L,M
INPUT PROMPT "SAVE FILENAME(.MQO)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".MQO"
!'FOR L=0 TO MAXLEVEL
!'FOR M=0 TO L
!'LET F$="球面調和関数" & STR$(L) & "-" & STR$(M) & ".MQO"
OPEN #1:NAME F$
PRINT #1:"Metasequoia Document"
PRINT #1:"Format Text Ver 1.0"
PRINT #1
PRINT #1:"Scene {"
PRINT #1:CHR$(9);"pos 0.0000 0.0000 1500.0000"
PRINT #1:CHR$(9);"lookat 0.0000 0.0000 0.0000"
PRINT #1:CHR$(9);"head -0.5236"
PRINT #1:CHR$(9);"pich 0.5236"
PRINT #1:CHR$(9);"ortho 0"
PRINT #1:CHR$(9);"zoom2 5.0000"
PRINT #1:CHR$(9);"amb 0.250 0.250 0.250"
PRINT #1:"}"
PRINT #1:"Object ";CHR$(34);"obj";CHR$(34);" {"
PRINT #1:CHR$(9);"depth 0"
PRINT #1:CHR$(9);"folding 0"
PRINT #1:CHR$(9);"scale 1.000000 1.000000 1.000000"
PRINT #1:CHR$(9);"rotation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"translation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"visible 15"
PRINT #1:CHR$(9);"locking 0"
PRINT #1:CHR$(9);"shading 1"
PRINT #1:CHR$(9);"facet 59.5"
PRINT #1:CHR$(9);"color 0.898 0.498 0.698"
PRINT #1:CHR$(9);"color_type 0"
PRINT #1:CHR$(9);"vertex ";STR$(N*(N-1)+2);" {"
LET ALPHA=0
LET BETA=0
LET X=-Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*COS(BETA*PI/180)
LET Y=Y2(MODE,L,M,ALPHA,BETA)*COS(ALPHA*PI/180)
LET Z=Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*SIN(BETA*PI/180)
PRINT #1:CHR$(9);FORM$(X);" ";FORM$(Y);" ";FORM$(Z)
FOR ALPHA=180/N TO 179 STEP 180/N
FOR BETA=0 TO 359 STEP 360/N
LET X=-Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*COS(BETA*PI/180)
LET Y=Y2(MODE,L,M,ALPHA,BETA)*COS(ALPHA*PI/180)
LET Z=Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*SIN(BETA*PI/180)
PRINT #1:CHR$(9);FORM$(X);" ";FORM$(Y);" ";FORM$(Z)
NEXT BETA
NEXT ALPHA
LET ALPHA=180
LET BETA=0
LET X=-Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*COS(BETA*PI/180)
LET Y=Y2(MODE,L,M,ALPHA,BETA)*COS(ALPHA*PI/180)
LET Z=Y2(MODE,L,M,ALPHA,BETA)*SIN(ALPHA*PI/180)*SIN(BETA*PI/180)
PRINT #1:CHR$(9);FORM$(X);" ";FORM$(Y);" ";FORM$(Z)
PRINT #1:CHR$(9);"}"
PRINT #1:CHR$(9);"face ";STR$(N*N);" {"
FOR I=1 TO N
IF I=N THEN
PRINT #1:CHR$(9);CHR$(9);"3 V(1 ";STR$(N);" 0)"
ELSE
PRINT #1:CHR$(9);CHR$(9);"3 V(0";" ";STR$(I+1);" ";STR$(I);")"
END IF
NEXT I
FOR I=1 TO N*(N-2)
IF MOD(I,N)=0 THEN
PRINT #1:CHR$(9);CHR$(9);"4 V(";STR$(I);" ";STR$(I-N+1);" ";STR$(I+1);" ";STR$(I+N);")"
ELSE
PRINT #1:CHR$(9);CHR$(9);"4 V(";STR$(I);" ";STR$(I+1);" ";STR$(I+N+1);" ";STR$(I+N);")"
END IF
NEXT I
  │  └続き しばっち 2008/04/05 19:44:26   ツリーへ
Re: 球面調和関数  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:44:26
続き


FOR I=N*(N-2)+1 TO N*(N-1)
IF I=N*(N-1) THEN
PRINT #1:CHR$(9);CHR$(9);"3 V(";STR$(N*(N-1));" ";STR$(N*(N-2)+1);" ";STR$(N*(N-1)+1);")"
ELSE
PRINT #1:CHR$(9);CHR$(9);"3 V(";STR$(I);" ";STR$(I+1);" ";STR$(N*(N-1)+1);")"
END IF
NEXT I
PRINT #1:CHR$(9);"}"
PRINT #1:"}"
PRINT #1:"Eof"
CLOSE #1
!'NEXT M
!'NEXT L
END

EXTERNAL FUNCTION FORM$(X)
OPTION ARITHMETIC COMPLEX
LET FORM$=LTRIM$(USING$("---%.####",X))
END FUNCTION

EXTERNAL FUNCTION Y2(MODE,L,M,ALPHA,BETA)
OPTION ARITHMETIC COMPLEX
LET Y0=Y(L,M,ALPHA,BETA)
SELECT CASE MODE
CASE 0
LET YY=Y0*CONJ(Y0) !'2乗(共役複素数を掛ける)
CASE 1
LET YY=RE(Y0) !'実部
CASE 2
!'IF M=0 THEN STOP !' M=0の時は実数(虚部は0)
LET YY=IM(Y0) !'虚部
END SELECT
LET Y2=ABS(YY)
END FUNCTION

EXTERNAL FUNCTION Y(L,M,ALPHA,BETA) !'球面調和関数
OPTION ARITHMETIC COMPLEX
LET Y=(-1)^((M+ABS(M))/2)/SQR(2*PI)*SQR((2*L+1)/2)*SQR(FAC(L-M)/FAC(L+M))*P(L,M,COS(ALPHA*PI/180))*EXP(SQR(-1)*M*BETA*PI/180)
END FUNCTION

EXTERNAL FUNCTION P(L,M,X) !'ルジャンドル陪関数
OPTION ARITHMETIC COMPLEX
LET T=((1-X^2)^(M/2))/(2^L)
FOR K=0 TO (L-M)/2
LET S=S+(-1)^K*FAC(2*L-2*K)*X^(L-2*K-M)/FAC(K)/FAC(L-K)/FAC(L-2*K-M)
NEXT K
LET P=S*T
END FUNCTION

EXTERNAL FUNCTION FAC(X)
OPTION ARITHMETIC COMPLEX
LET S=1
FOR I=2 TO X
LET S=S*I
NEXT I
LET FAC=S
END FUNCTION
  │   └シェルピンスキー三角形 しばっち 2008/04/05 19:45:04   ツリーへ
Re: 続き  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/05 19:45:04
シェルピンスキー三角形


SUB RECURSIVE(LEV,X,Y,Z,L)
IF LEV=0 THEN
CALL SAVEOBJ(X,Y,Z,L)
ELSE
CALL RECURSIVE(LEV-1,X,Y+L,Z,L/2)
CALL RECURSIVE(LEV-1,X+L*COS(0*PI/180),Y,Z+L*SIN(0*PI/180),L/2)
CALL RECURSIVE(LEV-1,X+L*COS(120*PI/180),Y,Z+L*SIN(120*PI/180),L/2)
CALL RECURSIVE(LEV-1,X+L*COS(240*PI/180),Y,Z+L*SIN(240*PI/180),L/2)
END IF
END SUB

SUB SAVEOBJ(X,Y,Z,L)
LET K=K+1
PRINT #1:"Object ";CHR$(34);"obj";STR$(K);CHR$(34);" {"
PRINT #1:CHR$(9);"depth 0"
PRINT #1:CHR$(9);"folding 0"
PRINT #1:CHR$(9);"scale 1.000000 1.000000 1.000000"
PRINT #1:CHR$(9);"rotation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"translation 0.000000 0.000000 0.000000"
PRINT #1:CHR$(9);"visible 15"
PRINT #1:CHR$(9);"locking 0"
PRINT #1:CHR$(9);"shading 1"
PRINT #1:CHR$(9);"facet 59.5"
PRINT #1:CHR$(9);"color 0.898 0.498 0.698"
PRINT #1:CHR$(9);"color_type 0"
PRINT #1:CHR$(9);"vertex 4 {"
PRINT #1:CHR$(9);FORM$(X);" ";FORM$(Y+L*2);" ";FORM$(Z)
PRINT #1:CHR$(9);FORM$(X+L*2*COS(0*PI/180));" ";FORM$(Y);" ";FORM$(Z+L*2*SIN(0*PI/180))
PRINT #1:CHR$(9);FORM$(X+L*2*COS(120*PI/180));" ";FORM$(Y);" ";FORM$(Z+L*2*SIN(120*PI/180))
PRINT #1:CHR$(9);FORM$(X+L*2*COS(240*PI/180));" ";FORM$(Y);" ";FORM$(Z+L*2*SIN(240*PI/180))
PRINT #1:CHR$(9);"}"
PRINT #1:CHR$(9);"face 4 {"
PRINT #1:CHR$(9);CHR$(9);"3 V(0 1 2)"
PRINT #1:CHR$(9);CHR$(9);"3 V(0 2 3)"
PRINT #1:CHR$(9);CHR$(9);"3 V(0 3 1)"
PRINT #1:CHR$(9);CHR$(9);"3 V(1 3 2)"
PRINT #1:CHR$(9);"}"
PRINT #1:"}"
END SUB

LET L=200
INPUT PROMPT "SAVE FILENAME(.MQO)=":F$
INPUT PROMPT "LEVEL(1 - 7)=":LEV
!'LET F$="シェルピンスキーガスケット" & STR$(LEV)
IF POS(F$,".")=0 THEN LET F$=F$ & ".MQO"
OPEN #1:NAME F$
PRINT #1:"Metasequoia Document"
PRINT #1:"Format Text Ver 1.0"
PRINT #1
PRINT #1:"Scene {"
PRINT #1:CHR$(9);"pos 0.0000 0.0000 1500.0000"
PRINT #1:CHR$(9);"lookat 0.0000 0.0000 0.0000"
PRINT #1:CHR$(9);"head -0.5236"
PRINT #1:CHR$(9);"pich 0.5236"
PRINT #1:CHR$(9);"ortho 0"
PRINT #1:CHR$(9);"zoom2 5.0000"
PRINT #1:CHR$(9);"amb 0.250 0.250 0.250"
PRINT #1:"}"
CALL RECURSIVE(LEV,X,Y,Z,L)
PRINT #1:"Eof"
CLOSE #1
END

EXTERNAL FUNCTION FORM$(X)
LET FORM$=LTRIM$(USING$("---%.####",X))
END FUNCTION
  │    └メタセコイア(Metasequoia)本体で読み込ん... 山中和義 2008/04/06 11:40:43   ツリーへ
Re: シェルピンスキー三角形  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/06 11:40:43
メタセコイア(Metasequoia)本体で読み込んだ場合への改修案

カメラ情報と頂点座標値を次のように変更してみました。

  :
 PRINT #1:CHR$(9);"pos 0.0000 0.0000 10000.0000" !<-----
 PRINT #1:CHR$(9);"lookat 0.0000 0.0000 0.0000"
 PRINT #1:CHR$(9);"head -0.5236"
 PRINT #1:CHR$(9);"pich 0.5236"
 PRINT #1:CHR$(9);"ortho 0"
 PRINT #1:CHR$(9);"zoom2 2.42" !<-----
  :
  :
 PRINT #1:CHR$(9);FORM$(X*100);" ";FORM$(Y*100);" ";FORM$(Z*100) !'座標データ
  :

とすると、表示される座標との整合性(1目盛り0.5)があると思います。




球面調和関数の場合は、

頂点座標値の部分(3箇所)
 PRINT #1:CHR$(9);FORM$(X*1000);" ";FORM$(Y*1000);" ";FORM$(Z*1000)
  DXFファイルを作る しばっち 2008/04/06 18:38:29   ツリーへ
Re: 3Dファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/06 18:38:29
DXFファイルを作る


ご注意


別途外部アプリケーション等必要です。


LET N=51
LET XS=-3
LET XE=3
LET ZS=-3
LET ZE=3
LET YS=-6
LET YE=6
LET MODE=0
INPUT PROMPT "SAVE FILENAME(.DXF)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".DXF"
OPEN #1:NAME F$
PRINT #1:"0"
PRINT #1:"SECTION"
PRINT #1:"2"
PRINT #1:"ENTITIES"
FOR I=0 TO N-1
FOR J=0 TO N-1
LET Z=ZS+(ZE-ZS)/(N-1)*I
LET X=XS+(XE-XS)/(N-1)*J
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:"0"
PRINT #1:"3DFACE"
PRINT #1:"8"
PRINT #1:"LAYER1"
PRINT #1:"62"
PRINT #1:"1"
PRINT #1:"10"
PRINT #1:X
PRINT #1:"20"
PRINT #1:Y
PRINT #1:"30"
PRINT #1:Z
LET Z=ZS+(ZE-ZS)/(N-1)*I
LET X=XS+(XE-XS)/(N-1)*(J+1)
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:"11"
PRINT #1:X
PRINT #1:"21"
PRINT #1:Y
PRINT #1:"31"
PRINT #1:Z
LET Z=ZS+(ZE-ZS)/(N-1)*(I+1)
LET X=XS+(XE-XS)/(N-1)*(J+1)
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:"12"
PRINT #1:X
PRINT #1:"22"
PRINT #1:Y
PRINT #1:"32"
PRINT #1:Z
LET Z=ZS+(ZE-ZS)/(N-1)*(I+1)
LET X=XS+(XE-XS)/(N-1)*J
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:"13"
PRINT #1:X
PRINT #1:"23"
PRINT #1:Y
PRINT #1:"33"
PRINT #1:Z
NEXT J
NEXT I
PRINT #1:"0"
PRINT #1:"ENDSEC"
PRINT #1:"0"
PRINT #1:"EOF"
CLOSE #1
END

EXTERNAL FUNCTION FUNC(MODE,X,Y)
SELECT CASE MODE
CASE 0
LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
LET FUNC=X*Y*(X^2-Y^2)
CASE 2
LET FUNC=(X^2-Y^2)/2
CASE 3
LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
IF (X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
LET FUNC=2
ELSE
LET FUNC=0
END IF
CASE 5
LET Z=4-X^2-Y^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
END SELECT
END FUNCTION
  WRLファイルを作る しばっち 2008/04/06 18:39:11   ツリーへ
Re: 3Dファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/06 18:39:11
WRLファイルを作る


ご注意

別途プラグイン等必要です。
(VRML,プラグイン等で検索してください)


LET N=51
LET XS=-5
LET XE=5
LET YS=-5
LET YE=5
LET ZS=-5
LET ZE=5
LET MODE=0
INPUT PROMPT "SAVE FILENAME(.WRL)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".WRL"
OPEN #1:NAME F$
PRINT #1:"#VRML V2.0 utf8" !'ヘッダー部はコピペ
PRINT #1:"NavigationInfo {"
PRINT #1:" headlight TRUE"
PRINT #1:" type [";CHR$(34);"EXAMINE";CHR$(34);" ";CHR$(34);"ANY";CHR$(34);"]"
PRINT #1:"}"
PRINT #1:"Background {"
PRINT #1:" skyColor [1 1 1]"
PRINT #1:"}"
PRINT #1:"Viewpoint {"
PRINT #1:" position 0 0 15"
PRINT #1:"}"
PRINT #1:"Shape {"
PRINT #1:" appearance Appearance {"
PRINT #1:" material Material {"
PRINT #1:" }"
PRINT #1:" }"
PRINT #1:" geometry IndexedFaceSet {"
PRINT #1:" solid FALSE"
PRINT #1:" colorPerVertex FALSE"
PRINT #1:" coord Coordinate {"
PRINT #1:" point ["
FOR J=0 TO N-1
LET Z=ZS+(ZE-ZS)/(N-1)*J
FOR I=0 TO N-1
LET X=XS+(XE-XS)/(N-1)*I
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:" ";FORM$(X);" ";FORM$(Y);" ";FORM$(Z);
IF I=N-1 AND J=N-1 THEN PRINT #1 ELSE PRINT #1:","
NEXT I
NEXT J
PRINT #1:" ]"
PRINT #1:" }"
PRINT #1:" color Color {" !'コピペ
PRINT #1:" color [1 0.73 0.73, 1 0.87 0.73, 1 1 0.73, 0.87 1 0.73]" 
PRINT #1:" }"
PRINT #1:" coordIndex ["
FOR I=0 TO N-2
FOR J=0 TO N-2
PRINT #1:STR$(J+N*I);" ";STR$(J+1+N*I);" ";STR$(J+1+N*(I+1));" ";STR$(J+N*(I+1));" -1"
NEXT J
NEXT I
PRINT #1:" ]"
PRINT #1:" colorIndex ["
FOR I=1 TO N^2
PRINT #1:" 2"
NEXT I
PRINT #1:" ]"
PRINT #1:" }"
PRINT #1:"}"
CLOSE #1
END

EXTERNAL FUNCTION FUNC(MODE,X,Y)
SELECT CASE MODE
CASE 0
LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
LET FUNC=X*Y*(X^2-Y^2)
CASE 2
LET FUNC=(X^2-Y^2)/2
CASE 3
LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
IF (X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
LET FUNC=2
ELSE
LET FUNC=0
END IF
CASE 5
LET Z=4-X^2-Y^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
END SELECT
END FUNCTION

EXTERNAL FUNCTION FORM$(X)
FORM$=LTRIM$(USING$("---%.######",X))
END FUNCTION
  POVファイルを作る しばっち 2008/04/06 18:40:01   ツリーへ
Re: 3Dファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/04/06 18:40:01
POVファイルを作る


ご注意

別途外部アプリケーション等必要です。

参考
http://www.povray.org/

LET N=51
LET XS=-5
LET XE=5
LET YS=-5
LET YE=5
LET ZS=-5
LET ZE=5
LET MODE=0
INPUT PROMPT "SAVE FILENAME(.POV)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".POV"
OPEN #1:NAME F$
PRINT #1:"#include ";CHR$(34);"colors.inc";CHR$(34) !'ヘッダー部はコピペ
PRINT #1:"camera {"
PRINT #1:" sky <0,1,0>"
PRINT #1:" location <0,8,-8>"
PRINT #1:" look_at <0,0,0>"
PRINT #1:"}"
PRINT #1:"light_source {y*5 color 1}"
PRINT #1:"background { color White }"
PRINT #1
PRINT #1:"#declare Default = texture {"
PRINT #1:" pigment { color rgb <0,0.5,1> }"
PRINT #1:" finish { ambient 0.2 specular 0.7 roughness 0.05 }"
PRINT #1:"}"
PRINT #1
PRINT #1:"mesh2 {"
PRINT #1:" vertex_vectors {"
PRINT #1:" ";N*N;","
FOR J=0 TO N-1
LET Z=ZS+(ZE-ZS)/(N-1)*J
FOR I=0 TO N-1
LET X=XS+(XE-XS)/(N-1)*I
LET Y=FUNC(MODE,X,Z)
LET Y=MIN(YE,MAX(Y,YS))
PRINT #1:"<";FORM$(X);",";FORM$(Y);",";FORM$(Z);">";
IF I=N-1 AND J=N-1 THEN
PRINT #1
PRINT #1:" }"
ELSE
PRINT #1:",";
IF MOD(I+J*N+1,3)=0 THEN PRINT #1
END IF
NEXT I
NEXT J
PRINT #1
PRINT #1:" face_indices {"
PRINT #1:" ";2*(N-1)^2;","
FOR I=0 TO N-2
FOR J=0 TO N-2
PRINT #1:"<";STR$(J+N*I);",";STR$(J+1+N*I);",";STR$(J+1+N*(I+1));">,";
PRINT #1:"<";STR$(J+N*I);",";STR$(J+1+N*(I+1));",";STR$(J+N*(I+1));">";
IF I=N-2 AND J=N-2 THEN PRINT #1 ELSE PRINT #1:","
NEXT J
NEXT I
PRINT #1:" }"
PRINT #1:" texture { Default }"
PRINT #1:"}"
CLOSE #1
END

EXTERNAL FUNCTION FORM$(X)
LET FORM$=LTRIM$(USING$("---%.######",X))
END FUNCTION

EXTERNAL FUNCTION FUNC(MODE,X,Y)
SELECT CASE MODE
CASE 0
LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
LET FUNC=X*Y*(X^2-Y^2)
CASE 2
LET FUNC=(X^2-Y^2)/2
CASE 3
LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
IF (X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
LET FUNC=2
ELSE
LET FUNC=0
END IF
CASE 5
LET Z=4-X^2-Y^2
IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
END SELECT
END FUNCTION
   └参考.直接POV-Rayでの記述で曲面がなめらか... 山中和義 2008/04/07 13:38:24  (修正1回)  ツリーへ
Re: POVファイルを作る  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/04/07 13:38:24 ** この記事は1回修正されてます
参考.直接POV-Rayでの記述で曲面がなめらかに表現できます。


#include "colors.inc"

camera {
sky <0,1,0>
location <0,10,-10>
look_at <0,0,0>
}

light_source { <0,10,0> White*0.5 } //top
light_source { <0,10,-10> White } //front

background { color White }


isosurface {

function { -cos(5*sqrt(x*x+z*z)) + y } //case 0
//function { -(pow(x,3)-x*pow(z,2)) + y } //case 30
//function { -sin(x*z) + y } //case 31
//function { -sin(2*x)*cos(z) + y } //case 41

//#declare fn_A=function { (x*x-1)*(x*x-9)*(z*z-1)*(z*z-9) }; //case 4
//function { -min(max(fn_A(x,y,z),0),2) + y }

//#declare fn_A=function { 4-x*x-z*z }; //case 5
//function { -sqrt(max(fn_A(x,y,z),0)) + y }

contained_by { box { -5, 5 } }

max_gradient 50

open

pigment{ color rgb <0,0.5,1> }

translate <0,1,0>

}




モデルの形状データ(頂点の座標、平面の構成など)の書式変換だけでなく、
上記のような「シーン記述を作成する」という手もあるかと思います。
(たとえば、BASIC言語のプログラムをC言語にコンバートする)

その他の手法として、小さな球(点)をプロットすることで曲線、曲面を表現することもあります。

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。