Yarım ok çiz
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
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}}]}]
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.
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]