3D геометрия сюжета в Mathematica - PullRequest
3 голосов
/ 16 марта 2011

В вопросе о плоской геометрии я спросил, как рисовать плоские геометрические конструкции. Теперь я хочу расширить его до 3D. Не только эти геометрические пакеты не очень хороши, я также сталкиваюсь с множеством препятствий в Mathematica.

  1. Locator нельзя использовать в 3d.

  2. Manipulate, похоже, не работает и в 3D.

Позвольте мне привести конкретный пример. У меня есть правильный круглый конус с высотой h и отверстием 2 theta. Его круглое основание находится на горизонтальной плоскости. Для заданного элемента конуса нарисуйте круг с диаметром d в касательной плоскости к этому конусу, минуя элемент конуса. Затем нарисуйте горизонтальный диаметр этого круга. Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 15 апреля 2011

Это действительно не так сложно. Сначала мы определяем трехмерный круг, заданный положением его центра, и двумя векторами, которые охватывают плоскость, в которой он находится:

Circle3D[{x_, y_, z_}, {v1 : {_, _, _}, v2 : {_, _, _}}, r_] :=
 Line[Table[{x, y, z} + {r Cos[2 Pi t], r Sin[2 Pi t]}.{v1, v2}, {t, 
    0, 1, 1/120}]]

Затем задается точка {x,y,z} на конусе с острием при {0,0,h}, касательные равны {x,y,z-h} и {-y,x,0}. Остальное просто рисует:

ConeQuestion[h_, theta_, pt : {x_, y_, z_}, 
   d_] /; (x^2 + y^2) Cos[theta]^2 == Sin[theta]^2 (z - h)^2 := 
 Module[{tangents},
  tangents = {Normalize[{0, 0, h} - pt], Normalize[{-y, x, 0}]};
  {{Opacity[0.8, Yellow], Cone[{{0, 0, 0}, {0, 0, h}}, h*Tan[theta]]},
   {Thick, Dashed, Circle3D[pt, tangents, d]},
   {Red, Sphere[pt, 1/10]},
   {Orange, 
    Line[{pt - d Normalize[{-y, x, 0}], 
      pt + d Normalize[{-y, x, 0}]}]}}
  ]

enter image description here

...