Yarım ok çiz

Sep 09 2020

Mathematica'da yan yana iki yarım ok çizmek istiyorum . Bunun gibi bir şey:

İşte girişimim:

x0 = -0.2;
y0 = -0.2;
k = -1;
dist = 0.02;(*distance between two arrows*)
c1 = Max[c /. Solve[y0 == k x0 + c, c]];
c2 = Max[c /. Solve[-y0 == k (-x0) + c, c]];
xA = x0 - dist/Sqrt[1 + k^2];
yA = k xA + c1;
xB = -x0 - dist/Sqrt[1 + k^2];
yB = k xB + c2;

Graphics[
{{Thick, Arrowheads[0.05], Arrow[{{x0, y0}, -{x0, y0}}],
Arrow[{{xB, yB}, {xA, yA}}]},
{White, Polygon[{{x0, y0}, -{x0, y0}, {xB, yB}, {xA, yA}}]}},
PlotRange -> {{-1., 1.}, {-1., 1.}}, Frame -> True, 
PlotRangeClipping -> True]

Kodu Arrowoluşturduğunuzda, okların her birinin sağ tarafını beyazla kaplarken iki s çizdiğimi görebilirsiniz Polygon. İşte sonucum:

(Oklar, bilerek yapılan 45 derecelik açının altındadır.)

GraphicsMathematica'da yarım ok için bir işlev olup olmadığını merak ediyordum . Ya da Arrow Graphicsyarım ok elde etmek için bir şekilde değiştirilebiliyorsa . Herhangi bir öneri için minnettar olurum.

Yanıtlar

5 cvgmt Sep 09 2020 at 23:11

Ayrıca kullanarak yeni bir ok stili tasarlayabiliriz Graphics

arrowStyle = 
  Graphics[{Black, Polygon[{{0, 0}, {-1, .2}, {-.8, 0}, {0, 0}}]}];
semiArrow = Arrowheads[{{0.2, 1, arrowStyle}}];
Graphics[{semiArrow, Arrow[{{0, 0}, {1, 1}}], 
  Arrow[{{1 + .1, 1 - .1}, {.1, -.1}}]}]The above codes does not suitable for 3D,why not?

Bu ilk denemedir. Geç başka bir stil elde etmek için çizginin kalınlığını ve okun konumunu ayarlayabiliriz.

Güncelleme Yukarıdaki kodlar 3D için uygun değil, neden olmasın?

 Clear["`*"];
 arrowStyle = 
  Graphics[{Black, FaceForm[Red], 
    Polygon[{{0, 0}, {-1, .2}, {-.8, 0}, {0, 0}}], EdgeForm[], 
    FaceForm[], Polygon[{{0, 0}, {-1, -.2}, {-.8, 0}, {0, 0}}]}];
semiArrow = Arrowheads[{{0.2, 1, arrowStyle}}];
Graphics3D[{semiArrow, Arrow[{{0, 0, 0}, {1, 1, 1}}]}]

4 C.E. Sep 09 2020 at 15:50

Bu, U + 21cc kodlu "sola doğru zıpkın üzerinde sağa bakan zıpkın" unicode karakterine benziyor. Bu bulunabilir burada . Bunu Mathematica'da şu şekilde kullanabiliriz:

harpoon = FromCharacterCode@FromDigits["21cc", 16];

Graphics[{
  Text[Style[harpoon, FontSize -> 25], {0, 0}],
  Text[Style[harpoon, FontSize -> 25], {10, 5}],
  Rotate[
   Text[Style[harpoon, FontSize -> 25], {5, 5}],
   30 Degree
   ]
  }]

Diğer yazı tipleri, örneğinize daha benzer görünebilir.

1 OkkesDulgerci Sep 10 2020 at 09:06

Düzenleme: Nihai hedefinizi bilmediğim için, işte girişimlerim.

    imSize = 100;
    poly = Polygon[{{0, 0}, {0, 2}, {9, 2}, {9, 4}, {14, 0}}];
 arrows = Rotate[Column[{Graphics[poly, ImageSize -> imSize], 
        Rotate[Graphics[poly, ImageSize -> imSize], 180 Degree]}, 
       Spacings -> 0], 45 Degree];
    Overlay[{Graphics[{FaceForm[], Rectangle[{-1, -1}, {1, 1}]}, 
       Frame -> True], arrows}, Alignment -> Center]


 poly = Polygon[{{0, 0}, {0, 2}, {9, 2}, {9, 4}, {14, 0}}];
 Rotate[Column[{Graphics[poly], Rotate[Graphics[poly], 180 Degree]}], 45 Degree]