是mathematica能够做一些平面几何绘图

时间:2011-02-22 21:18:01

标签: wolfram-mathematica

我正在尝试使用计算机来显示一些平面几何图。我不知道什么软件可以做到这一点,或者mathematica是否可以轻松地产生这样的情节。

例如,我有以下情节显示。 给定任何三角形ABC,让AD为二等分角BAC并在D处与BC相交的线。设M是AD的中点。设直径为AB的圆与F相交CM

如何制作这些图并在mma中显示相关的点标记?这很容易吗?有人可以举个例子,或者给出一些关于哪种软件最适合这个目的的建议吗?

非常感谢。

6 个答案:

答案 0 :(得分:5)

您可以在两分钟内使用Geometry Expressions完成图表。它有许多不错的功能,包括元素几何计算和将公式导出到Mathematica的接口。

图中的公式是由程序计算的。

enter image description here

免费使用,79美元 - 99美元可以保存。

答案 1 :(得分:5)

这是使用GeoGebra解决您所描述问题的快速解决方案。

这是我第一次使用GeoGebra,这花了我大约20分钟的时间 - 因此该程序制作精良且直观。 更重要的是,它可以导出到动态的,基于java的网页。以下是您指定的问题:TriangleCircle

修改

对于Mathematica演示,Plane Geometry有很多很好的例子。 在this页面上,我找到了其他软件,例如Cabri GeometryThe Geometer's Sketchpad

答案 2 :(得分:4)

我想我会在Mathematica中展示一下如何处理这个问题。虽然编码不是最简单的事情,但它确实具有灵活性。另外请记住,作者在图形方面相当不合适,因此可能会有更简单和/或更好的方法来实现它。

offset[pt_, center_, eps_] := center + (1 + eps)*(pt - center);

pointfunc[{pt_List, center_List, ptname_String}, siz_, 
   eps_] := {PointSize[siz], Point[pt], 
   Inset[ptname, offset[pt, center, eps]]};

Manipulate[Module[
  {plot1, plot2, plot3, siz = .02, ab = bb - aa, bc = cc - bb, 
   ac = cc - aa, cen = (aa + bb)/2., x, y, soln, dd, mm, ff, lens, 
   pts, eps = .15},
  plot1 = ListLinePlot[{aa, bb, cc, aa}];
  plot2 = Graphics[Circle[cen, Norm[ab]/2.]];
  soln = NSolve[{Norm[ac]*({x, y} - aa).ab - 
       Norm[ab]*({x, y} - aa).ac == 
      0, ({x, y} - cc).({-1, 1}*Reverse[bc]) == 0}, {x, y}];
  dd = {x, y} /. soln[[1]];
  mm = (dd + aa)/2;
  soln = NSolve[{({x, y} - cen).({x, y} - cen) - ab.ab/4 == 
      0, ({x, y} - cc).({-1, 1}*Reverse[mm - cc]) == 0}, {x, y}];
  ff = {x, y} /. soln;
  lens = Map[Norm[# - cc] &, ff];
  ff = If[OrderedQ[lens], ff[[1]], ff[[2]]];
  pts = {{aa, cen, "A"}, {bb, cen, "B"}, {cc, cen, "C"}, {dd, cen, 
     "D"}, {ff, cen, "F"}, {mm, cen, "M"}, {cen, ff, "O"}};
  pts = Map[pointfunc[#, siz, eps] &, pts];
  plot3 = Graphics[Join[pts, {Line[{aa, dd}], Line[{cc, mm}]}]];
  Show[plot1, plot2, plot3, PlotRange -> {{-.2, 1.1}, {-.2, 1.2}}, 
   AspectRatio -> Full, Axes -> False]],
 {{aa, {0, 0}}, {0, 0}, {1, 1}, Locator},
 {{bb, {.8, .7}}, {0, 0}, {1, 1}, Locator},
 {{cc, {.1, 1}}, {0, 0}, {1, 1}, Locator}, 
 TrackedSymbols :> None]

这是一个截屏。

enter image description here

Daniel Lichtblau Wolfram Research

答案 3 :(得分:2)

Mathematica不是最好的软件,虽然它可以解决。

http://demonstrations.wolfram.com/DrawingATriangle/包含非常好的三角形的源代码,按照该示例,您可以在代码中添加一条二等分线。

答案 4 :(得分:2)

如前所述,Mathematica不是最好的软件。根据您的具体目的,您可以使用几种更好的选项。为了以编程方式生成这样的图形,有几种语言特别适合于这样的任务。我建议您尝试eukleidesGCLC。如果您有使用TeX / LaTeX的任何经验,您可能需要查看metapostasymptote,甚至是tkz-euklide等LaTeX软件包。

另一方面,如果您希望以交互方式创建绘图,则可以使用许多程序。在网上搜索“动态几何软件”,你应该得到一些点击。其中我最推荐的是geogebra

答案 5 :(得分:1)

我认为我应该在Mathematica中尝试这个问题(只有在我完成后才能看到Daniel的解决方案)。我花了大约半个小时 - 这比我的GeoGebra解决方案要长,尽管之前我从未使用过GeoGebra。

代码没有尽可能快。这是因为我懒得编写正确的代码来查找直线和圆的交点,所以我只使用了较慢但更通用的FindInstance

一个非常全面的平面几何包可以作为Eric Weinstein MathWorld packages的一部分找到。它包括你可能想要的所有交集,二分等代码,但是要花一点时间来学习它。

angleBisector[A_,{B_,C_}]:=Module[{ba=Norm[B-A],ca=Norm[C-A],m},
  m=A+((B-A)/ba+(C-A)/ca)]

intersect[Line[{A_,B_}],Line[{C_,D_}]]:=Module[{s,t},
  A + s(B-A)/.First@FindInstance[A + s(B-A) == C + t(D-C), {s,t}]]
intersect[Line[{A_,B_}],Circle[p0:{x0_,y0_},r_]]:=Module[{s,x,y},
  A + s(B-A)/.FindInstance[A + s(B-A) == {x,y} 
  && Norm[p0-{x,y}] == r, {s,x,y}, Reals, 2]]

Manipulate[Module[{OO,circ,tri,angB,int,mid,FF},
  OO=(AA+BB)/2;
  circ=Circle[OO,Norm[AA-BB]/2];
  tri=Line[{AA,BB,CC,AA}];
  angB=angleBisector[AA,{BB,CC}];
  int=intersect[Line[{BB,CC}],Line[{AA,angB}]];
  mid=(AA+int)/2;
  FF=intersect[Line[{CC,mid}],Circle[OO,Norm[AA-BB]/2]];
  Graphics[{PointSize[Large],Point[{OO,int,mid}],Point[FF],tri,circ,
    Line[{AA,AA+3(angB-AA)}],Line[{CC,CC+3(mid-CC)}],
    Text["A",AA,{2,-2}],Text["B",BB,{-2,-2}],Text["C",CC,{2,2}],
    Text["O",OO,{0,-2}],Text["D",int,{-2,-1}],Text["M",mid,{-2,-1}]},
    PlotRange->{{-2,2},{-2,2}}]],
  {{AA,{-1,1}},Locator},
  {{BB,{1,1}},Locator},
  {{CC,{0,-1}},Locator}]

TriangleCircle