T交差点の曲がり角を表すためにtikzで円形の矢印を描く



Drawing Circular Arrows Tikz Represent Turns T Intersection



解決:

私はあなたがロードすることから利益を得ると思いますarrows.metaと曲げライブラリ。 アップデート :私は人が置くことができるスタイルを作成することに抵抗できませんでした それは パスの任意の位置にある矢印。

 documentclass [tikz、border = 3.14mm] {standalone}  usetikzlibrary {calc}%shapes、arrows、shapes.multipart、positioning、fit、使用されませんでした usetikzlibrary {arrows.meta、bending、decorations.markings、intersections}%  ここに画像の説明を入力してください



比較のために元のソリューションを保持しました。そして、はい、上の写真の弧を実際に円または楕円の弧にすることができます。以下からのパス構築のみが必要です。

ここに画像の説明を入力してください



 documentclass [tikz、border = 3.14mm] {standalone}  usetikzlibrary {calc}%shapes、arrows、shapes.multipart、positioning、fit、使用されませんでした usetikzlibrary {arrows.meta、bending}% コードは長く見えますが(OK、長いです;-)、1つのビルディングブロックのコピーアンドペーストにすぎません。そのためのマクロを書くことができます...

編集 :左円弧の方向を修正しました。

コメント :はい、私は知っています装飾.markingsライブラリと、パス上の好きな場所に矢印(または何でも)を配置する機能。ここでそれを使用しなかった理由は、基になるパスに従ってこれらの矢印を曲げる方法がわからなかったため、2つのパスを描画する必要があったためです。



アップデート :2つのアークが希望どおりではないことに気づきました。私はこの機会を利用して、円弧と楕円弧を実行するセミインテリジェントマクロを作成しました。 (これはセミインテリジェントなので、もちろんあなたはそれをだますことができますが、少なくともこれらの例ではそれはその仕事をします。)以前は間違っていたアークにそれを使用することはできません。醜い私見に見えるBノード。

 documentclass [tikz、border = 3.14mm] {standalone}  usetikzlibrary {calc}%shapes、arrows、shapes.multipart、positioning、fit、使用されませんでした usetikzlibrary {arrows.meta、bending、decorations.markings、intersections}%  ここに画像の説明を入力してください


を使用してtikzライブラリarrows.metaと選択した位置での接線(手動で調整可能)にほぼ等しい線上に矢印を描画するdecorations.markings。結果は完璧ではありませんが、それに近いものです。これに対する賞は比較的短いコードです:

 documentclass {article}  usepackage {tikz}  usetikzlibrary {arrows、%このmweで使用されていませんarrows.meta、%calcが追加されました、%このmweのdecorations.markingsで使用されていません、%fitが追加されました、%このmweの配置で使用されていません、%このmweシェイプでは使用されません、shapes.multipart%このmweでは使用されません}  begin {document}  begin {tikzpicture} [DL / .style args = {#1 /#2} {%ループの装飾、#1 :位置、#2:接線装飾の調整= {マーキング、マーク=位置#1で{ draw [-ステルス](-1pt、#2)-(0,0);}}、postaction = {decorate} }、DL / .default = 0.55 / 0.2pt]%roads:灰色のグラフ begin {scope} [every node / .style = {circle、thick、draw}]  node(A)at(0,0){A };  node(B)at(3,0){B};  node(C)at(6,0){C};  node(D)at(3,3){D};  end {scope}  draw [lightgray、line width = 3pt](A)-(B)(B)-(C)(B)-(D); %line graph  begin {scope} [every node / .style = {circle、draw、thick、scale = .7}]  node(AB)at(1.5、-。5){};  node(BA)at(1.5、.5){};  node(BC)at(4.5、-。5){};  node(CB)at(4.5、.5){};  node(BD)at(3.5,1.5){};  node(DB)at(2.5,1.5){};  end {scope}  begin {scope} [every edge / .style = {draw、line width = 1pt}]  path(AB)edge [DL = 0.53 / 0pt](BC)(CB)edge [DL = 0.53 / 0pt](BA);  begin {scope} [every edge / .append style = {DL、bend right = 75、looseness = 1.4}]  path(AB)edge(BA)(BA)edge(AB)(BC)edge(CB)( CB)エッジ(BC)(BD)エッジ(DB)(DB)エッジ(BD);  end {scope}  begin {scope} [every edge / .append style = {bend right = 45、looseness = 1}]  path(BA)edge [DL = 0.53 / 0.12pt](DB)(BD)edge [DL = 0.53 / 0.12pt](CB)(AB)エッジ[DL = 0.8 / 0.05pt](BD)(DB)エッジ[DL = 0.7 / 0.08pt](BC);  end {scope}  end {scope}  end {tikzpicture}  end {document}

ここに画像の説明を入力してください

編集: 欠落している矢印の頭を追加し、それらの配置を改善しました


円の矢印を描くコマンドはないと思います。少なくとも私はそれをマニュアルで見つけませんでした。ただし、適切な条件で2点間にエッジを描画すると、円弧になります(大きな円弧はすでに円形になっています)。以下では、私はあなたの問題を部分的に解決しました、私は少し眠いので、残りはあなた次第です。

真ん中の矢印の問題を解決しました。途中に別のノードを挿入するだけで十分です。別のものだけを追加する必要があります ミッドノード 大きな弧で。

円弧に関しては、私のものは正確に円形ではありませんが、少しシフトすると_mid_node_になります(ノードが表される円の半径に等しい長さでシフトする必要があります)。

コード

 documentclass [] {article}  usepackage {tikz}  usetikzlibrary {shapes、arrows、shapes.multipart、positioning、fit、calc}  begin {document}  begin {tikzpicture}%roads:灰色のグラフ begin {scope} [すべてのnode / .style = {circle、thick、draw}]  node(A)at(0,0){A};  node(B)at(3,0){B};  node(C)at(6,0){C};  node(D)at(3,3){D};  end {scope}  begin {scope} [every edge / .style = {draw = lightgray、line width = 3pt}]  path [-](A)edge(B);  path [-](B)エッジ(C);  path [-](B)エッジ(D);  end {scope}%line graph  begin {scope} [every node / .style = {circle、thick、draw、scale = .7}]  node(AB)at(1.5、-。5){};  node(BA)at(1.5、.5){};  node(BC)at(4.5、-。5){};  node(CB)at(4.5、.5){};  node(BD)at(3.5,1.5){};  node(DB)at(2.5,1.5){};  end {scope}  begin {scope} [every edge / .style = {draw = black、line width = 1pt}]  path [->](AB)edge(3、-。5);  path [-](3、-。5)エッジ(BC);  path [->](CB)エッジ(3、.5);  path [-](3、.5)エッジ(BA);  path [->](AB)edge [out = 0、in = -90](2,0);  path [-](2,0)edge [out = 90、in = 0](BA);  path [->](BA)edge [out = 180、in = 90](1,0);  path [-](1,0)edge [out = -90、in = 180](AB);  path [->](BC)edge [out = 0、in = -90](5,0);  path [-](5,0)edge [out = 90、in = 0](CB);  path [->](CB)edge [out = 180、in = 90](4,0);  path [-](4,0)edge [out = -90、in = 180](BC);  path [->](AB)edge [out = 0、in = -90](BD);  path [->](DB)edge [out = 270、in = 180](BC);  path [->](BD)edge [out = 90、in = 0](3,2);  path [-](3,2)edge [out = 180、in = 90](DB);  path [->](DB)edge [out = 270、in = 180](3,1);  path [-](3,1)edge [out = 0、in = 270](BD);  path [->](CB)edge [out = 180、in = 270](BD);  path [->](DB)edge [out = 270、in = 0](BA); % path [-](B)エッジ(D);  end {scope}  end {tikzpicture}  end {document}

結果

編集 :ノード間に円形の矢印を描くこともご覧ください。