我正在尝试使用计算机来显示一些平面几何图。我不知道什么软件可以做到这一点,或者mathematica是否可以轻松地产生这样的情节。
例如,我有以下情节显示。 给定任何三角形ABC,让AD为二等分角BAC并在D处与BC相交的线。设M是AD的中点。设直径为AB的圆与F相交CM
如何制作这些图并在mma中显示相关的点标记?这很容易吗?有人可以举个例子,或者给出一些关于哪种软件最适合这个目的的建议吗?
非常感谢。
答案 0 :(得分:5)
您可以在两分钟内使用Geometry Expressions完成图表。它有许多不错的功能,包括元素几何计算和将公式导出到Mathematica的接口。
图中的公式是由程序计算的。
免费使用,79美元 - 99美元可以保存。
答案 1 :(得分:5)
这是使用GeoGebra解决您所描述问题的快速解决方案。
这是我第一次使用GeoGebra,这花了我大约20分钟的时间 - 因此该程序制作精良且直观。 更重要的是,它可以导出到动态的,基于java的网页。以下是您指定的问题:TriangleCircle。
对于Mathematica演示,Plane Geometry有很多很好的例子。 在this页面上,我找到了其他软件,例如Cabri Geometry和The 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]
这是一个截屏。
Daniel Lichtblau Wolfram Research
答案 3 :(得分:2)
Mathematica不是最好的软件,虽然它可以解决。
http://demonstrations.wolfram.com/DrawingATriangle/包含非常好的三角形的源代码,按照该示例,您可以在代码中添加一条二等分线。
答案 4 :(得分:2)
如前所述,Mathematica不是最好的软件。根据您的具体目的,您可以使用几种更好的选项。为了以编程方式生成这样的图形,有几种语言特别适合于这样的任务。我建议您尝试eukleides或GCLC。如果您有使用TeX / LaTeX的任何经验,您可能需要查看metapost或asymptote,甚至是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}]