给出“部分”信息绘制几何形状的最佳方法

给出“部分”信息绘制几何形状的最佳方法

我正在尝试仅根据“部分”信息绘制几何形状。让我向您展示一些三角形的示例:

构造一个三角形 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 xpath 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

输出:

三角形

相关内容