Dessiner une demi-flèche
Je voudrais dessiner dans Mathematica deux demi-flèches l'une à côté de l'autre. Quelque chose comme ça:
Voici ma tentative:
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]
Formez le code, vous pouvez voir que j'ai dessiné deux Arrows, tout en couvrant la partie droite de chacune des flèches par du blanc Polygon. Voici mon résultat:
(Les flèches sont sous un angle de 45 °, ce qui a été fait exprès.)
Je me demandais s'il y avait une Graphicsfonction dans Mathematica pour la demi-flèche . Ou si l'on peut en quelque sorte modifier le Arrow Graphicsafin d'obtenir une demi-flèche. Je serais reconnaissant pour toutes suggestions.
Réponses
Nous pouvons également concevoir un nouveau style de flèche en utilisant 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?
C'est la première tentative. En retard, nous pouvons ajuster l'épaisseur de la ligne et la position de la flèche pour obtenir un autre style.
Mise à jour Les codes ci-dessus ne conviennent pas à la 3D, pourquoi pas?
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}}]}]
Cela ressemble au caractère unicode "harpon vers la droite sur harpon vers la gauche", avec le code U + 21cc. Il peut être trouvé ici . Nous pourrions l'utiliser dans Mathematica comme ceci:
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
]
}]
D'autres polices peuvent ressembler davantage à votre exemple.
Edit: Puisque je ne connais pas votre objectif ultime, voici mes tentatives.
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]