Mathematica в состоянии сделать некоторые плоские геометрические построения - PullRequest
4 голосов
/ 23 февраля 2011

Я пытаюсь использовать компьютер, чтобы показать некоторые графики плоской геометрии.Я не знаю, какое программное обеспечение может сделать это, или Mathematica может легко создавать такие графики.

Например, у меня есть следующий график, чтобы показать.Для любого треугольника ABC пусть AD будет линией, разделяющей угол BAC и пересекающей BC в точке D. Пусть M будет средней точкой AD.Пусть окружность, диаметр которой AB, пересекает CM в F.

Как получить эти графики и показать соответствующую маркировку точек в mma?Это легко сделать?Может кто-нибудь привести пример или дать рекомендацию относительно того, какое программное обеспечение лучше всего подходит для этих целей?

Большое спасибо.

Ответы [ 6 ]

5 голосов
/ 23 февраля 2011

Вот очень быстрое решение с использованием GeoGebra для описанной вами проблемы.

image

Это первый раз, когда я использую GeoGebra, и мне потребовалось около 20 минут, чтобы сделать программу, поэтому она довольно хорошо сделана и интуитивно понятна. Более того, он может экспортировать в динамические веб-страницы на основе Java. Вот проблема, которую вы указали: TriangleCircle .

Редактировать

Для демонстраций Mathematica есть много хороших примеров в Плоская геометрия . Со страницы на этой я нашел другое программное обеспечение, такое как Cabri Geometry и Блокнот Geometer's Sketchpad .

5 голосов
/ 23 февраля 2011

Вот ваш график с выражениями геометрии за две минуты. Он имеет много полезных функций, включая вычисления элементарной геометрии и интерфейс для экспорта формул в Mathematica.

Формула на чертеже рассчитана программой.

enter image description here

Бесплатное использование, $ 79 - $ 99, чтобы иметь возможность сэкономить.

4 голосов
/ 25 февраля 2011

Я думал, что покажу, как можно подойти к этому в 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

Даниэль Лихтблау Вольфрам Исследования

2 голосов
/ 23 февраля 2011

Как уже говорилось, Mathematica - не лучшее программное обеспечение для этого.Есть несколько лучших вариантов, которые вы можете использовать, в зависимости от вашей конкретной цели.Для программной генерации таких фигур существует несколько языков, специально адаптированных для таких задач.Я бы порекомендовал попробовать eukleides или GCLC .Если у вас есть опыт работы с TeX / LaTeX, вы можете посмотреть metapost или asymptote или даже пакет LaTeX, такой как tkz-euklide .

Если вы предпочитаете создавать свои рисунки в интерактивном режиме, доступно несколько программ.Поищите в интернете «программное обеспечение для динамической геометрии», вы должны получить несколько просмотров.Из тех, что я больше всего рекомендую геогебра .

2 голосов
/ 23 февраля 2011

Mathematica - не лучшее программное обеспечение для этого, хотя оно сработает.

http://demonstrations.wolfram.com/DrawingATriangle/ имеет исходный код для действительно хорошего треугольника, и, следуя этому примеру, вы можете добавить разделительную линиюк коду.

1 голос
/ 26 февраля 2011

Я подумал, что действительно должен попытаться решить эту проблему в Mathematica (только когда я закончил, я увидел решение Даниэля). Это заняло у меня около получаса - это больше, чем у моего решения GeoGebra, несмотря на то, что я никогда раньше не использовал GeoGebra.

Код не такой быстрый, как мог бы быть. Это потому, что мне было лень кодировать правильный код для поиска пересечений линий и окружностей, поэтому я просто использовал более медленный, но более общий FindInstance.

В пакетах MathWorld Эрика Вайнштейна можно найти достаточно обширный пакет плоской геометрии. Он включает в себя весь код пересечения, деления пополам и т. Д., Который вы, возможно, захотите, но для изучения всего этого потребуется немного времени.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...