私は制約プログラミングと再帰プログラミングについて学んでいます Prolog。私は(Sx,Sy)
で始まり、(Ex,Ey)
で終わるレベルNのコッホ曲線をプログラムする必要があります。計算されている線分はLsに格納されます。
私はgeneratelines(1,(60,0),(-60,0),Ls)
を実行しようとすると、私はレベル1のコッホ曲線の右4点の 座標取得:私はgeneratelines(2,(60,0),(-60,0),Ls)
を実行しようとすると、その後、私は次のスタートの間 すべての座標を取得Prolog - Koch-curveの座標を計算する
[[ (60, 0), (20, 0)],
[ (20, 0), (0.0, -34.64)],
[ (0.0, -34.64), (-20, 0)],
[ (-20, 0), (-60, 0)]]
を(60,0)
およびエンドポイント(20,0)
。
(20, 0), (0.0, -34.64),
(0.0, -34.64), (-20, 0),
(-20, 0), (-60, 0)
すぎ: は、しかし、私はしても、次のスタートとエンドポイント間のすべての座標を必要とします。
私の問題は、実装する方法がわからないので、より高いレベルの座標 を得ることです。
実際に私は次のように起こるべきだと思う:
generatelines(N1,(60,0),(20,0),Ls1)
generatelines(N1,(20,0),(0,-34.64),Ls1)
generatelines(N1,(0,-34.64),(-20,0),Ls1)
generatelines(N1,(-20,0),(-60,0),Ls1).
はたぶん、この問題を解決する私を助けるために誰かここにはあります。あなたは1つの述語で、一度にあまりにも多くをやろうとしている
- consult(library(clpfd)).
generatelines(0,_,_,Ls):- !.
generatelines(N, (Sx,Sy),(Ex,Ey),[Ls|Ls1]):-
N1 is N-1,
X2 is Sx+(Ex-Sx)/3,
Y2 is Sy+(Ey-Sy)/3,
R1 is sqrt((X2-Sx)*(X2-Sx)+(Y2-Ey)*(Y2-Ey)),
Phi1 is atan((Y2-Sy)/(X2-Sx)),
X3 is X2 +R1*cos((Phi1-240)*pi/180),
Y3 is Y2 +R1*sin((Phi1+240)*pi/180),
X4 is X2+(X2-Sx),
Y4 is Y2+(Y2-Sy),
Ls = [
[(Sx,Sy),(X2,Y2)],
[(X2,Y2),(X3,Y3)],
[(X3,Y3),(X4,Y4)],
[(X4,Y4),(Ex,Ey)]
],
generatelines(N1,(Sx,Sy),(X2,Y2),Ls1).
お返事ありがとうございます!あなたのアドバイスを試みたが、まだ問題がある:-( – claire