Vẽ nửa mũi tên
Tôi muốn vẽ trong Mathematica hai nửa mũi tên cạnh nhau. Một cái gì đó như thế này:
Đây là nỗ lực của tôi:
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]
Tạo mã bạn có thể thấy rằng tôi đã vẽ hai chữ Arrows, trong khi che phần bên phải của mỗi mũi tên bằng màu trắng Polygon. Đây là kết quả của tôi:
(Các mũi tên có góc dưới 45 ° được thực hiện có chủ đích.)
Tôi đã tự hỏi nếu có một số Graphicschức năng trong Mathematica cho nửa mũi tên . Hoặc nếu người ta có thể sửa đổi bằng cách nào đó Arrow Graphicsđể có được nửa mũi tên. Tôi sẽ biết ơn cho bất kỳ đề nghị.
Trả lời
Chúng tôi cũng có thể thiết kế một kiểu mũi tên mới bằng cách sử dụng 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?
Đó là nỗ lực đầu tiên. Muộn hơn, chúng ta có thể điều chỉnh độ dày của đường và vị trí của mũi tên để có được kiểu khác.
Cập nhật Các mã trên không phù hợp với 3D, tại sao không?
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}}]}]
Điều này trông giống như ký tự unicode "cây lao thẳng bên phải trên cây lao thẳng bên trái", với mã U + 21cc. Nó có thể được tìm thấy ở đây . Chúng ta có thể sử dụng nó trong Mathematica như thế này:
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
]
}]
Các phông chữ khác có thể trông giống với ví dụ của bạn hơn.
Chỉnh sửa: Vì tôi không biết mục tiêu cuối cùng của bạn, đây là nỗ lực của tôi.
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]