ドラゴンカーブ2

WBOY
リリース: 2024-08-08 16:30:22
オリジナル
850 人が閲覧しました

ドラゴン曲線を 5 つの言語ソリューションで表示したいです:

  1. パスカル
  2. パイソン
  3. カメ
  4. デルフィ
  5. Java スクリプト

ドラゴン曲線は、自己相似フラクタル曲線のファミリーのメンバーであり、Pascal の手順に示すように、リンデンマイヤー システムなどの再帰的手法で近似できます。

procedure Dragon(n,a,t:Integer; d,x,y: Double; var b: TBitmap);
  var a1, a2: integer;
begin
 if n <= 1 then begin
   with b.Canvas do begin
     Pen.Color:= random(p);
     MoveTo(Trunc(x + 0.5), Trunc(y + 0.5));
     LineTo(Trunc(x + d *_cos[a]+0.5),Trunc(y+d *_sin[a]+0.5));
     exit;
   end;
 end;
 d:= d * s;
 a1:= (a - t) and 7;
 a2:= (a + t) and 7;
 dragon(n - 1, a1, 1, d, x, y, b);
 dragon(n - 1, a2, -1, d, x + d *_cos[a1], y + d *_sin[a1], b);
end;
ログイン後にコピー

再帰的に、右カーリング ドラゴンは、90 度の角度で、右のドラゴンの後に左のドラゴンが続きます。そして、左のドラゴンは左の後に右が続きます。 maXbox の Python と Turtle でも同じことが得られます:

Const DRAGFUNC =
  'def dragon(level=4, size=200, direction=45):   '+LF+
  '  if level:                                     '+LF+
  '      right(direction)                          '+LF+
  '      dragon(level-1, size/1.41421356237, 45)   '+LF+
  '      left(direction * 2)                       '+LF+
  '      dragon(level-1, size/1.41421356237, -45)  '+LF+
  '      right(direction)                          '+LF+
  '  else:                                         '+LF+
  '      forward(size)                             ';

function PyCodeDragonTurtle(imgpath, aAPIKey: string): string;
begin
  with TPythonEngine.Create(Nil) do begin
  //pythonhome:= 'C:\Users\User\AppData\Local\Programs\Python\Python312\';
  try
    loadDLL;
    autofinalize:= false;
    ExecString('from turtle import right,left,forward,speed, exitonclick,hideturtle');
    ExecStr(DRAGFUNC); 
    ExecStr('speed(0)');  
    //ExecStr('hideturtle()'); 
    ExecStr('dragon(6)');
    ExecStr('exitonclick()');
    //result:= (EvalStr('r.json()')); *)
  except
    raiseError;        
  finally      
    Free;
  end; 
 end;
end; 
ログイン後にコピー

ドラゴンの曲線は、おそらく、細長い紙を繰り返し半分に折ることによって生成される形状として最も一般的に考えられています。

Dragon Curve 2
ペンとしてのドラゴン。カラー:= (p);

スクリプトは次の場所にあります:
多言語スクリプト

https://sourceforge.net/projects/maxbox/files/Examples/13_General/1320_dragon_curve_51_py.txt/download

Dragon Curve 2
深さ = 9

Dragon Curve 2

Dragon Curve 2
ペンの幅:= 2; Pen.Color := cllime;

タートルサウンド

Dragon Curve 2
角度を振幅、ステップをトーンとしてタートルの音を試してください:

procedure DrawDragon2(step, adir: integer; len:real);
begin
  //myturtle:= TJvTurtle.create(self);
  with myturtle do begin
    if (step >-1) and (len >1) then begin
      len:= len /sqrt(2);
      Turn(45*adir);
        DrawDragon2(step-1, +1, len);
      Turn(-90*adir);
        DrawDragon2(step-1, -1, len);
      Turn(45*adir);
    end else      //*)
      moveforward(len )
  end;  
end;
ログイン後にコピー

Dragon Curve 2

JavaScript 埋め込み

Microsoft Edge WebView2 コントロールを使用すると、Web テクノロジ (HTML、CSS、JavaScript) をネイティブ アプリに埋め込むことができます。 WebView2 コントロールは、ネイティブ アプリで Web コンテンツを表示するためのレンダリング エンジンとして Microsoft Edge を使用します。

Dragon Curve 2

<!-- DragonCurve.html -->
<html>
<head>
<script type='text/javascript'>
function pDragon(cId) {
  // Plotting Dragon curves. 2/25/17 aev
  var n=document.getElementById('ord').value;
  var sc=document.getElementById('sci').value;
  var hsh=document.getElementById('hshi').value;
  var vsh=document.getElementById('vshi').value;
  var clr=document.getElementById('cli').value;
  var c=c1=c2=c2x=c2y=x=y=0, d=1, n=1<<n;
  var cvs=document.getElementById(cId);
  var ctx=cvs.getContext("2d");
  hsh=Number(hsh); vsh=Number(vsh);
  x=y=cvs.width/2;
  // Cleaning canvas, init plotting
  ctx.fillStyle="white"; ctx.fillRect(0,0,cvs.width,cvs.height);
  ctx.beginPath();
  for(i=0; i<=n;) {
    ctx.lineTo((x+hsh)*sc,(y+vsh)*sc);
    c1=c&1; c2=c&2;
    c2x=1*d; if(c2>0) {c2x=(-1)*d}; c2y=(-1)*c2x;
    if(c1>0) {y+=c2y} else {x+=c2x}
    i++; c+=i/(i&-i);
  }
  ctx.strokeStyle = clr;  ctx.stroke();
}
</script>
</head>
<body>
<p><b>Please input order, scale, x-shift, y-shift, color:</></p>
<input id=ord value=11 type="number" min="7" max="25" size="2">
<input id=sci value=7.0 type="number" min="0.001" max="10" size="5">
<input id=hshi value=-265 type="number" min="-50000" max="50000" size="6">
<input id=vshi value=-260 type="number" min="-50000" max="50000" size="6">
<input id=cli value="red" type="text" size="14">
<button onclick="pDragon('canvId')">Plot it!</button>
<h3>Dragon curve</h3>
<canvas id="canvId" width=640 height=640 style="border: 2px inset;"></canvas>
</body>
</html> 
ログイン後にコピー

Dragon Curve 2
maXbox5
の EdgeView で変更して探索する スクリプトは次の場所にあります:

5 か国語のスクリプト全体は

にあります

以上がドラゴンカーブ2の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート