アルゴリズムを考案するには、ランダムだが有効な列車トラックレイアウトを生成する方法は?

cs.stackexchange https://cs.stackexchange.com/questions/117972

質問

私は私が曲線の数cとストレートトラックの数量sを持っているかどうか疑問に思っています。以下の規則が満たされています:

1)トラックが接続されているときに、電車の閉じられた(連続的な)ループを閉じます。

2)ランプ、トラックの曲げ、トラックのぶつけ、トラックの交差はすべて許可されていません。

3)CとSは両方とも数えています。一例は、C= 20およびS= 10であろう。 360度の完全な円を作るために同じ方向に12曲線を取ります。これにより、360度を完成させるために同じ方法で同じ方法で配置する必要があります。他の人は、列車に完全なループがあるため、正味の結果が360度の限り「Zigzag」できます。

ストレートトラックは約10インチ(25.4 cm)長く、曲線トラックは約12.4インチ(中心下、曲線に続きます)、曲線30度です。トラック上の「TIE」は最大幅が3 5/8インチ(9.2 cm)です。私はまっすぐな曲線を互いの上に置き、12.4 "(31.6cm)の曲線が12"(30.5 cm)の直線長(直線と同じ方向)、および3 "(7.6 cm)を有することを測定した。 (直線の垂直方向に)曲がりくねった。12c円は、反対側のトラックの中心から中心まで47.5 "(120.6 cm)の直径を有する。

全ての測定値はおおよそです。

更新

私はエラーを排除し、驚いたことに驚きを排除するのを助けるために多くのより多くのトラックを再測定し、まっすぐな長さは10インチではなく、約9.78インチであるように見えます。これは、ジグザグ曲線の一致をまっすぐに一致させることに大きな影響を与えます。もともと私は4つのジグザグの曲線= 5ストレートだと思いましたが、それはかなり正しくありませんでした。 4曲線は約47インチの直線距離があり、9.78で5.78 "で48.9"、ほぼ2インチが長くなります。だからそれは47と9.78のLCM(少なくとも一般的な倍数)を見つけるためにそれをトリックします。235となる。235= 47 * 5および235 / 9.78= 24.028 ...(十分に近い)。それは20のジグザグ曲線が直線的な長さで24ストレートとほぼ同じです。幸いなことに26ストレートがあります。残りはレイアウトの他の場所に簡単に配置できます。

私が発見したもう1つのものは、曲線2をZigzag 2(OOCCCCOO)で同じ方向(OOCCCCOO)、次いでそれらのうち8つの83インチの線形距離(Occoocco)が交互にわたって94インチではなく、わずか83インチの線形距離を有することである。 83と9.78のLCMは約166です。これらの曲線のSO 16は17ストレートと同じ直線長を持ちます。それは私が44曲線を持っていて26の直進しか持っていないので、私はこの置換を実行するならば、私はそれを補うのを助けることができます。

曲線3を一度にZigzag(OOOCCCCCCCCOOO)を噛み、わずかに曲げると、厳密に直線長が10ストレート(約97.8インチ)に入れることができます。

更新終了

それでは、コンピュータプログラムは幾何学的モデルを作成し、各トラックの正確な位置を覚えているか、またはこれをコーディングするより簡単な方法はありますか?私は「ボタンを押す」とコンピュータを「スピット」することができたいです。

列車を使う子供たちにこの作業アルゴリズムを与えたいので、動作しないレイアウトを試みているとイライラしていないため、トラックを曲げて作業をするか、除外しなければならない彼らは合いません。コンピュータは、すべてのトラックを使用して有効なレイアウトを作成し、アルゴリズムが良い場合はおそらく数秒で。これは彼らのためのフラストレーションを防ぐのを助けることです。

私はいくつかのコーディングスキルを持っていますが、私は最初に最初にアルゴリズムを知る必要があります(候補アルゴリズムのいくつかの部分をテストするだけでなく)

私が考えているのは、小さい(縮小された)表現を使用してトラックをコンピュータモデルにすることができました。候補のレイアウトでトラックを「配置」するだけで、すでにそこにある他のトラックとの衝突をチェックするだけです。

私はおそらくそれをするより良い方法があると考えているので、私がいくつかの助け/アイデアのためにここに求める理由です。私は本当にこれを働くようにしたい、そして私はここでトラックを持っていますので、アルゴリズムが作動しているかどうかを確認するためにそれらを使用することができます。

C= 20とS= 10を使用しようとするパラメータは、それが合理的に少しトラック(合計30)であるためです。アルゴリズムが十分に堅牢であるかどうかを仮定しています、cとsの値は意志で変更することができ、それはまだ機能します。たとえば、最終的にはC= 44とS= 26を試してみたい。

最終的な単語

あなたのコメントやこの質問に関する提案をお願いします。私もたくさん学びました。子供として、私は電子トラックと彼らがどのように彼らが一緒にフィットするのか大人としてのどのようにあまり考えたことがない、私はそれがそれが魅力的な幾何学的問題であることを見ることができます/図/図を生成するための非常に難しい数学的計数問題です

いくつかの異なる(ユニークな)トラックレイアウトがあるかがあります。私はあなたが私がしたのと同じくらいこの運動を楽しんだことを願っています。子供たちもそれに感謝しています。

最終的な単語

役に立ちましたか?

解決

私は私がブルートフォースソリューションを提供すると思った。

アイデアは、すべてのシングルトラックレイアウトを順番に試すことです。レイアウトを構築するときは、左利きの曲線、右利き曲線とストレートを考慮する必要がある3つの部分しかありません。

レイアウト内の個数に対応する幅の3つの数字としてトラックレイアウトを符号化することができます。すべてのトラックレイアウトを列挙するためだけに、符号化が0=ストレート、1=左、2=右、2=右側にある基本3で数えてください。

次の段階は、レイアウトが両端に結合することを確認することです。最初のチェックは、1つの完全な回路に行くのに十分な曲線があることを確認することです。 1つの回路に対して反時計回りの意味を選択した場合、12個の左の曲線が必要です。余分な右の曲線ごとに、余分な左の曲線を追加する必要があります。そのため、特定のレイアウトが機能する可能性がある場合は、左の曲線の数を追加して正しい曲線の数を減算するだけです - これは12です。

最後に、実際に会うエンドをチェックする必要があります。私たちは単にデカルトグリッド上のトラックをプロットします。 [0,0]で原点を開始し、[0,0]で終わったら、それから結合します。

トラックをプロットする最も簡単な方法は、 logo スタイルです。言い換えれば、最後のレイトラックピースの方向を向く方向ベクトルを維持する。左の曲線を抽象化した場合は、方向を30度回転させ、右曲線に対して-30度回転します - 直線は方向に影響を与えません。

カーブとストレートを実際にプロットするには、ピースのサイズ、すなわち直線のための10単位、すなわち12.4 x 12/2 x Pi(完全な円形トラックの半径)の単位によって方向ベクトルを拡大縮小します。 。

警告

浮動小数点数の付加に丸める誤差のため、プロットは正確ではありません。そして実際の生活の中で私たちは会うためにいくつかのWiggleの部屋を出会うことができるので、これは認められなければなりません。

多くのレイアウトは同じですが、1つの位置にシフトします。以前のものを保存して確認してください。

を確認する以外の重複シフトレイアウトを除外する方法はわかりません。

アルゴリズムは、ピースが十字架にあるレイアウトを除外しません。そのためには、レイアウト内の各ピースがレイアウト内の別の部分を渡っていないことを確認する必要があります(それはO(n ^ 2))。そして、曲線曲線、曲線ストレートおよびストレートストレート交差をチェックする必要があり、それは非常に複雑になり始めなければならないでしょう。

アルゴリズムの走行時間は明らかに指数関数的である(3 ^ n)、そしておそらく非常に大きなレイアウトには非現実的ではない。

以下はあなたがあなたに概念の証明を与えるためにExcelに貼り付けられるいくつかのVBAコードです。私はあなたのお気に入りの言語への変換を支援するために、私は故意にコードをできるだけ単純に保つことを試みました。ご質問はご質問ください。

Option Explicit

Type Vector
    X As Double
    Y As Double
End Type

Sub GenerateTrackLayout()
    Dim lCounts(40) As Long
    Dim lColumn As Long
    Dim lTrackLength As Long
    Dim lCurveSum As Long
    Dim lIndex As Long
    Dim lIndex2 As Long
    Dim vDirection As Vector
    Dim vBase As Vector
    Dim vTrackPosition As Vector
    Dim fPI As Double
    Dim fCurveRadius As Double
    Dim fStraightLength As Double
    Dim sPath As String
    Dim lOutputRow As Long
    Const TOLERANCE = 0.5 'inch

    lOutputRow = 1

    vBase.X = Sqr(3) / 2 ' 30 degrees
    vBase.Y = 1 / 2 ' 30 degrees

    fPI = 4 * Atn(1)
    fCurveRadius = 12.4 * 12 / (2 * fPI)
    fStraightLength = 10

    lTrackLength = 12 ' initial track length

    Application.ScreenUpdating = False

    Do
        ' Check for closed track
        lCurveSum = 0

        For lIndex = 0 To lTrackLength - 1
            If lCounts(lIndex) = 1 Then
                lCurveSum = lCurveSum + 1
            ElseIf lCounts(lIndex) = 2 Then
                lCurveSum = lCurveSum - 1
            End If
        Next

        If lCurveSum = 12 Then ' one 360 degree rotation anti-clockwise
            vDirection.X = 0
            vDirection.Y = 1
            vTrackPosition.X = 0
            vTrackPosition.Y = 0

            ' Plot the track and ensure that ends meet
            For lIndex = 0 To lTrackLength - 1
                Select Case lCounts(lIndex)
                    Case 0 ' straight
                        vTrackPosition = AddVectors(vTrackPosition, ScaleVector(vDirection, fStraightLength))
                    Case 1 ' left curve
                        vDirection = MultiplyVectors(vDirection, vBase, 1)
                        vTrackPosition = AddVectors(vTrackPosition, ScaleVector(vDirection, fCurveRadius))
                    Case 2 ' right curve
                        vDirection = MultiplyVectors(vDirection, vBase, -1)
                        vTrackPosition = AddVectors(vTrackPosition, ScaleVector(vDirection, fCurveRadius))
                End Select

                ' If ends meet within tolerance then output the track
                If Abs(vTrackPosition.X) < TOLERANCE Then
                    If Abs(vTrackPosition.Y) < TOLERANCE Then
                        If lIndex = (lTrackLength - 1) Then
                            sPath = ""
                            For lIndex2 = 0 To lIndex
                                Select Case lCounts(lIndex2)
                                    Case 0 ' straight
                                        sPath = sPath & "S"
                                    Case 1 ' left
                                        sPath = sPath & "L"
                                    Case 2 ' right
                                        sPath = sPath & "R"
                                End Select
                            Next
                            Application.ScreenUpdating = True
                            Cells(lOutputRow, 1).Value = sPath
                            Application.ScreenUpdating = False
                            lOutputRow = lOutputRow + 1
                        End If
                    End If
                End If
            Next
        End If

        ' Count in base 3 where number width is Track Length
        lColumn = 0
        Do
            lCounts(lColumn) = lCounts(lColumn) + 1
            If lCounts(lColumn) = 3 Then
                lCounts(lColumn) = 0
                lColumn = lColumn + 1
            Else
                Exit Do
            End If
        Loop Until lColumn = lTrackLength

        ' We've tried all tracks of this length, next one up...
        If lColumn = lTrackLength Then
            Erase lCounts ' reset all columns to zero
            lTrackLength = lTrackLength + 1
        End If
        DoEvents
    Loop
End Sub

' Vector maths

Function MultiplyVectors(vVectorA As Vector, vVectorB As Vector, ByVal fConjugate As Double) As Vector
    MultiplyVectors.X = vVectorA.X * vVectorB.X - fConjugate * vVectorA.Y * vVectorB.Y
    MultiplyVectors.Y = vVectorA.Y * vVectorB.X + fConjugate * vVectorA.X * vVectorB.Y
End Function

Function AddVectors(vVectorA As Vector, vVectorB As Vector) As Vector
    AddVectors.X = vVectorA.X + vVectorB.X
    AddVectors.Y = vVectorA.Y + vVectorB.Y
End Function

Function ScaleVector(vVector As Vector, ByVal fScale As Double) As Vector
    ScaleVector.X = vVector.X * fScale
    ScaleVector.Y = vVector.Y * fScale
End Function
.

他のヒント

最初にフレームチャレンジ:

コンピュータは、すべてのトラックを使用して有効なレイアウトを作成し、アルゴリズムが良い場合はおそらく数秒で

数秒で実行するアルゴリズムは必要ありません。数秒で出力が必要です。 Cornerのコンピュータ上で実行されているBrute Force Layout Cruncherを停止してUIがランダムなレイアウトを選択できるデータベース内のソリューションを保存することができないことがわかりません。


世代の面では、数標準的なアプローチが多数あります。状態空間はかなり大きくなるので、徹底的な検索は実現不可能である可能性があります。しかし、次のいずれかが試してみる価値があるかもしれません:

  • ストレートと等しい数の左右の曲線のリストの純粋なランダムシャッフリング、続いて「善」テスト。
  • hill-登山:ランダムな置換から始めて、それから単純なスワップをテストして、「善」を改善するかどうかを確認してください。もしそうなら、スワップと繰り返しを作ります。
  • シミュレートされたアニーリング:似ていますが、より良い丘に到達することを望む「善」を減らす変化を可能にします。
  • 遺伝的アルゴリズム:多くのランダムな置換を生成し、それらを繰り返し混ぜ合わせて最良の結果を維持します。しかし、それらを混合する方法は完全にはっきりしていません。
  • 後者の3つは、挿入によって挿入によって生成された「既知の良い」曲線から始めることができます。
  • MENT-in-the-MeminDのオプションを探索します。例えば。全角+ 90°の全曲線を生成し、エンドポイント間の2Dベクトルで索引付けし、曲線があるより多くの数のベクトルがある場合は、閉じた四辺形を形成するものを見つけるために徹底的にQuadrupletを検討できる可能性があります。 。

「善」テストのために、曲線が閉じていない場合は明らかに大きなペナルティである必要があります。自己重なりに対する大きなペナルティがある必要があります。クワッドツリーを使用して、連続していないが互いに近いセグメントを見つけ、次にARC-ARC、ARC-LINEおよびラインラインの交差点テストを見つけるためにテストすることが傾いています。別のエッジを囲むエッジを重ねます。


小さいケースを完全に強制的に強制することができるかもしれないもう1つの戦略は、より大きなベクトルへの代数的アプローチをとることです。ストレートピースの長さを $ 2 \ etell $ とし、曲線の半径は $ 2R $ 。方向はすべて30度の倍数であるため、ストレートピースの端の間のベクトルは $$(0、\ PM 2 \ ELL)、(\ PM 2 \ ELL、 0)、(\ PM \ ELL、\ PM \ SQRT3 \ ELL)、(\ PM \ SQRT3 \ ELL、\ PM \ ELL)$$ および同様に、曲線の端の間のベクトルは< SPAN CLASS="math-container"> $$(\ PM R、\ PM \ SQRT3 R)、(\ PM \ SQRT3 R、\ PM R)、(\ PM(\ SQRT3 - 1)R、\ PM(\ SQRT3 - 1)R))$$

$ \ frac \ etell r $ $ \ frac {\ sqrt 3 \ ell} R $ 、または $ \ frac \ ell {\ sqrt 3 r} $ $ + \ sqrt 3 $ + \ sqrt 3 $ sを要求することの意味は、 $ \ sqrt 3 $ sがあるが、それらはいくつかの重いフィルタリングを可能にするかもしれないし、次にペアで直線を挿入する。少数の曲線のブルートフォースでこれを適用すると、対称的なアプローチで潜在的に失われているレイアウトの数を評価することができます。

1つの可能な解決策これをできるだけ簡単にするためにこれを迅速に迅速に得るためには次のようになります。最も単純なレイアウトはもちろん12c(12湾曲したトラック(互いに対して同じ方向(互いに対して同じ方向)、単純な円を形成することです。これは私たちが建てることができる基礎となるでしょう。

そのため、基本的なアルゴリズムはトラックを追加するときの各ステップで360度の連続ループレイアウトを維持することです。 360度のプロパティが維持されるように、残った曲線の数を調べ、それらをグループ内のレイアウトに追加することでこれを行うことができます。たとえば、12 Cレイアウト(単純な円)から始めます。私たちは合計20℃があることを知っていますので、私たちは残っている8cを持っています。 360度プロパティを維持するものの一部の最も簡単な追加は、逆方向の曲線と同じ方向曲線を追加することです(メインサークルと同じ)。その後、レイアウトの反対側にも同じことをするでしょう。この簡単な例では、サークルレイアウトに4つの曲線を追加したので、12cは16℃(4c残りの場合)になるでしょう。全20(この例では)が正しく配置されるまで曲線を配置し続けます。すべての曲線からなるこのレイアウトは有効な閉ループレイアウトです。電車はこのレイアウトを使うことができますが、それはまだ行われていないので、すべての曲線トラックで構成されています。

それは、それらが360度のプロパティを変えていないので、ペア(2トラック)で追加できること以外は同じ方法で挿入されます。彼らはどこにでも挿入することができますので、最初にすべての曲線トラックを最初に置き、次に戻って戻って、まっすぐなまっすぐに配置するのが最善だと思います(しかし対称的に)。

これは私が今考えることができる最も簡単なアルゴリズムです。それは360度の閉ループ、対称的なトラックを生成することが保証され、曲線の数が4の倍数であると仮定し、そしてストレートの倍数は2の倍数であり、それはそれぞれのトラックを使用します。

検討するのは(このアルゴリズムをコンピュータ上で使用するとき、またはレイアウトを構築しているときに単に心の中に使用する場合)、他方の方向にスペースの制限がある場合があります。たとえば、長いパティオではありますが、それほど広くはありません。アルゴリズムを使用するときは、レイアウトが組み立てられる場所の長次元に向かってバイアスされるべきです。

誰かがすべてのトラックを使用して非対称レイアウトを形成するためのアルゴリズムを把握できる場合は、それはさらに印象的になるでしょう。

最も簡単な解と最も複雑なものとの間の複雑さの違いは驚くべきものです。円(12c)から始めて、この問題のために取得され、子供にとって合理的なものと同じくらい簡単ですが、有効なレイアウト(非対称なものを含む)を生み出すことができる一般的な解決策を分析することは非常に興味深いです。

現実の非コンピュータアルゴリズムは、レイアウトにいくつかの「クール」な形を追加して接続の近くにそれを取得してから戻ってきて微調整して(閉ループの場合)。 70トラックピースの合計(44cと26s)で、大きなレイアウトが可能です。私は約20メートルのトラックの合計約67フィートを計算しました。電車は1回すべてのレイアウトを一度ループするには約1分かかります。

もう1つの候補解決策は、各トラックの実際の測定値を取り、レイアウトの右端を覚えていることです。レイアウトを構築するときは、ストレートトラックまたは左の曲線(反時計回り)から始めて、最後に追加されたトラックがその右端のエッジからどれだけ離れているかを累積し、その後他のトラックを追加するときに、その後トラックの組み合わせを許可することはできません。その右端の辺にぶつかるか渡ることさえ近くになっていないかもしれません。したがって、たとえば、ストレートトラックから始めて(この候補ソリューションの12C初期円はありません)、次に別のトラックピースをランダムに選択します。それが右端の「交差」の規則を破ることになるので、私たちは正しい(時計回りに)順番に変わらないでしょう。最初のストレートトラックの後、私たちの唯一のオプションは別のストレートまたは左(反時計回り)曲線です。適用するための別の規則はまっすぐ後になるでしょう、私たちは行に9つ以上の同じ方向の曲線を追加することを許されません。そうしないと、他のトラックをすでに整っています。その制限はより透明な場合は8に減らすことさえでき、それが発生した場合、次のトラックは逆方向指向の曲線でなければなりません(ストレートが問題を引き起こす可能性があるため)

このアルゴリズムは、戻ってきて、最初のトラックピースの反対側に接続するためにそれを得るのにいくらかの助けを必要とするでしょう。反時計回りの曲線を+1と時計回りの曲線を-1としてカウントし、最後に追加された曲線で最大12を追加する必要があることを主張することができます。 CC(反時計回り)曲線を時計回りの曲線で4:1の比率でバイアスすることで、CHANSEは16 CCと4時計回りに160度の円を取得することによって、これを手助けすることができます。あれば

彼のアルゴリズムはCC曲線を追加しようとしていますが、既存のトラックをバンプすると、その時点で2つのオプションがあり、反対方向の向き曲線を試したり、レイアウトをやり直したりします。私はファーストコンピュータ上で、最終的にはそれが良いレイアウトを得るだろうと思います。

このメソッドが12c以降のすべての同じレイアウトを生み出すかどうかはまだ確かではありませんが、それは強制するためのルールがいくつかあるため、コンピュータ上で実装が容易であるかもしれません、そして私たちは構築しています一度に1トラックをレイアウトします。

実際には、 3番目の可能な候補ソリューションを考えていて、実装するのが難しくありませんでした。それは次のようになります。

上記の手法を使用するが、半分のレイアウト(各タイプのトラックの半分を使用して、10曲線、5つのストレートを使用しています。コンピュータはランダムトラックを選びますが、ネットで終わるレイアウトのみを受け入れます。 180度の左折(トラックが触れることができない右側の境界線を施行しているため、大丈夫です。大丈夫です。大丈夫、コンピュータに有効な「ハーフレイアウト」を見つけます。それから私たちがすることは単に時計回りの曲線の在庫を取るだけです。そして、反時計回りの曲線は、トラックの他の半分(必ずしも対称的には)であることを複製します。まっすぐに、私たちは挿入された角度で録音しなければなり、それからそれらをトラックの他の半分に合わせる必要があります、しかしまた、必ずしも対称的には

反時計回りの曲線ではsをSRIDY、Oに使用してSを使用して試してください。最初の半分のレイアウトに集中してください。

第1のストレートトラックは私たちから離れているでしょう、そしてそれは私たちが交差することができない私たちの最も右端を定義します。

SoosocSooSooc - これは5つのストレートを持ち、6つの反時計回りの曲線(8のうち2の2が2時計回りの曲線でキャンセルされていた)で10曲線がありますので、これは有効な半レイアウトです。

今、まっすぐな角度で「タブを保持」し、それらを「キャンセル」させるために同じ角度(しかし反対方向)トラックを持つものと一致させることができます。

1:0度角ストレート
0:30度の角度
2:60度の角度
0:90度の角度の直進
2:120度の角度
0:150度の角度の直線
0:180度の角度ストレート

レイアウトの残りの半分で「一致」するように、それを単一の開始ストレートトラックに接続するようにするために、同じ数のOSとCSを一致させる必要がありますが、同じ数のStrapyssと一致する必要があります。 + 180度の「戻る」角度で。たとえば、60度のストレートでは、どこかにあるレイアウトの反対側に直線が40度よりよく、必ずしも正確に反対のことがありません。これは、60度ストレートが主に左側に行く(この方式を使用)、240度ストレートが右に戻り、同じ量を右に戻し、それらの2トラックの貢献を効果的に「キャンセル」します。出発トラック位置から逸脱する

それで、レイアウトの「欠けている半分」を作成するために私たちがする必要があるのは、私たちが必要とする既知のトラックを取ることです(そしてまっすぐな角度であることを知っていることを知っている)、そして任意の順序でそれらを「スクランブル」するだけです。

他の側の「補完的な」トラックでレイアウトの半分と一致する必要がない方法があるかもしれませんが、それはいくつかのより複雑な数学を含み、それを解決するのに十分な時間が含まれていないでしょう。賞金がアクティブになっている時間。すべてのトラックがその方法で使用されるわけではなく、トラックのわずかな曲がりが必要になるわけではありません。この質問のためにこの特別な財産を無視することができます。

私は実際にそれがうまくいくかどうかを確認するために非対称なトラックを作りました。 Sストレートワイズカーブの場合はSを使用して、クロックワイズカーブの場合はCを使用して、開始ストレートトラックに対する角度(度)に、上半分の場合次のものがあります。

S0、O30、O60、S60、O90、C60、S60、O90、O120、S120、S120、O150、O180、O210、C180

トラックの下半分に取得しました:

O210、O240、S240、C210、O240、S240、O270、O300、S300、S300、O330、O360、O390、C360、S360

実際には絵が間違った側から撮影されたので上下は反転します。最初のトラックが青いゴミ箱の近くでまっすぐなので、PICの視聴者に向かって、2番目のトラックは反時計回りの曲線です。

画像の説明がここに入力されています

この技術は、私の究極の目標である44cと26Sを含む、多くの偶数の曲線と偶数の直線を扱うことになるようです。電子コンピュータがこれを解決するために本当に必要ではないので、これは本当に励ましています、私は子供たちがトラックの半分で望む半円形の中間的な形状だけを築くことができます(22cと13s)、それから彼らのデザインを "正しい"そういうことです

180度、その後、トラックの反対側に「一致」し、必ずしも対称的にはありません。

始動トラックと終了トラックが非常に近い場所にある180度のレイアウトを作成する場合は、注意する必要があります。たとえば、疑問符の上部の形状「?」 (ドットなし)がその上部曲線を続けるので、それはより多くのことから、ドットがあった場所の上にあるまっすぐに非常に近いでしょう。それから下半分のために、あなたは「上半分」から他のまっすぐなものがあるので、あなたはすぐに反時計回りの曲線をすることができないでしょう。私の閉ループのレイアウトのイメージは、「上」の半分に「ボトルネック」を持っていなかったがもちろん、私が今説明したように可能であるために働いた。

「問題のある」列車のレイアウトは、トラックの半分が狭い中央の砂時計の形をややくらいする場合です。その場合は、トラックが互いに非常に近いため、特定の曲線を作ることができないため、上部を「ミラー」する必要があります。これが例...

です

href="https://i.stack.imgur.com/fr9yx.jpg" rel="nofollownoreferrer"> 画像の説明がここに入力されています

もう1つの興味深い観察は、4つのジグザグ湾曲トラックが5ストレートで(直線距離だけスパンした)ほとんど完全な交換であることです。しかし、これらの多くは長さに大きな違いを生み出します。上記の更新されたセクションに記載されているように、20個のジグザグカーブは24ストレートとほぼ完全一致(直線距離の場合)です。

画像の説明がここに入力されています

この技術を使って、70のトラック全てで巨大なレイアウトを作ることができます。それは12c円から始まり、次に片側で、私は挿入することができます 24直線(長さ240インチ)。レイアウトの反対側の長辺(直線側の長さとほぼ一致させるため)では、20個のジグザグカーブ(長さ約240インチ)を使用します。ほぼ並ぶべきで、わずかな曲がりがそれを作動させるべきです。レイアウトを「バランス」(そして接続されている)を保つために、残りのトラック(2つと12曲がった)を簡単に配置できます。

は、右に直接進んでいる点(0,0)から始めるとします。もう一度点(0,0)に達するまでトラックを追加する必要があります。ここには2つの問題があります:1つは左から来る点(0,0)に到達することです。もう1つは重なりはありません。

反時計回りの円を形成するには、左に曲がる12曲がったピースが必要です。これらは正確な円を形成します。 0または24または36個の曲線の部分を持つと、8つか2つか2つまたは3つの円があります。

およびもちろん、追加のトラックを追加することができ、これらは特定の規則に従う必要があります。 0,0に戻ります。そして、第1の12を超える左湾曲したピースの数は、右湾曲した部分の数と一致しなければならないので、ピースが0.0で直角に一致する。

それはあなたが使うことができる部分です。あなたは明らかに十字架がないことを確認する必要があります。

長さが正確に正確にある場合は、たとえば、左右の組み合わせが4つまたは5つのストレートとまったく同じ距離をカバーすることです。

ともちろんトラック Bendyであり、これはより多くの可能性を生み出す可能性があります。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top