我正在尝试仅根据“部分”信息绘制几何形状。让我向您展示一些三角形的示例:
构造一个三角形 ABC,使得 ∡CAB=75°、d(A,B)=40 和 d(C,A)=60。
对于这一个,我是这样做的:
\startMPpage[offset=1dk]
save A, B, C, x ;
pair A, B, C ;
path x ;
A = origin ;
B = (40, 0) ;
x = (B-A) rotatedabout(A,75) ;
C = point 1 of x * 6/4 ;
draw fullcircle scaled 2abs (A-B) shifted A withcolor lightgray;
draw A--B--C--cycle;
dotlabel.bot("A", A) ;
dotlabel.bot("B", B) ;
dotlabel.top("C", C) ;
\stopMPpage
产生
所以,嗯,它起作用了,但是我对于如何找到的坐标pair C
以及如何找到的都不太满意path x
。
所以,我想我可以使用圆圈:
\startMPpage[offset=1dk]
save A, B, C, c, x;
pair A, B, C ;
path c, x ;
A = origin ;
B = (40, 0) ;
c = fullcircle scaled 120 shifted A ;
x = (B--A) rotatedabout(A, 75) shortened -100;
C = c intersectionpoint x ;
draw c withcolor lightgray;
draw A--B--C--cycle ;
dotlabel.bot("A", A) ;
dotlabel.bot("B", B) ;
dotlabel.top("C", C) ;
\stopMPpage
但这似乎更糟。
另一个是
构造一个三角形 ABC,使得 d(A,B)=60、∡BAC=50° 和 ∡ABC=65°。
\startMPpage[offset=1dk]
save A, B, C, x, y ;
pair A, B, C ;
path x, y ;
A = origin ;
B = (60, 0) ;
x = (B--A) rotatedabout(A, 50) ;
y = (B--A) rotatedabout(B, -65) ;
C = x intersectionpoint y;
draw fullcircle scaled 2abs (A-B) shifted A withcolor lightgray;
draw A--B--C--cycle;
dotlabel.bot("A", A) ;
dotlabel.bot("B", B) ;
dotlabel.top("C", C) ;
\stopMPpage
产生
再次,我对此并不满意。特别是和path x
:path y
如果我们改变角度,它可能不再起作用。
在我上一个问题的答案,瑟斯顿提到他的有用使用 Metapost 绘图文档,但我没有在其中找到有关所有这些内容的任何内容。
有些,我的问题是:有没有更好的方法来绘制那种几何形状?
答案1
另一种选择可能是使用whatever
构造。MetaPost 擅长解决方程组。下面我只做三角形,因为我觉得这是你的主要问题。
\starttext
\startMPpage[offset=1dk]
save A, B, C ;
pair A, B, C ;
A = origin ;
B = (40, 0) ;
C = (60, 0) rotated 75 ;
draw A--B--C--cycle ;
dotlabel.bot("A", A) ;
dotlabel.bot("B", B) ;
dotlabel.top("C", C) ;
\stopMPpage
\startMPpage[offset=1dk]
save A, B, C ;
pair A, B, C ;
A = origin ;
B = (60, 0) ;
C = whatever*dir(50) = B + whatever*dir(180 - 65) ;
draw A--B--C--cycle;
dotlabel.bot("A", A) ;
dotlabel.bot("B", B) ;
dotlabel.top("C", C) ;
\stopMPpage
\stoptext
输出: