Пересечение тел

Форум пользователей пакета Maple

Модератор: Admin

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Пересечение тел

Сообщение serval » Ср июн 29, 2011 8:19 pm

Пожалуйста, помогите построить объемный рисунок.
Нужны линии пересечения таких объектов:
1. Куб с вершинами [1,1,1],[1,1,-1],[-1,1,-1],[-1,1,1],[-1,-1,1],[1,-1,1],[1,-1,-1],[-1,-1,-1]
2. Сфера с центром в [0,0,0] проходящая через точку [1,1,0]
3. Плоскость нормальная вектору [0,1,0]
4. Плоскость нормальная вектору [1,1,1]
Можно ли сделать поверхности тел полупрозрачными, а линии пересечения объектов явными?

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Пересечение тел

Сообщение Kitonum » Чт июн 30, 2011 12:14 am

serval писал(а):Пожалуйста, помогите построить объемный рисунок.
Нужны линии пересечения таких объектов:
1. Куб с вершинами [1,1,1],[1,1,-1],[-1,1,-1],[-1,1,1],[-1,-1,1],[1,-1,1],[1,-1,-1],[-1,-1,-1]
2. Сфера с центром в [0,0,0] проходящая через точку [1,1,0]
3. Плоскость нормальная вектору [0,1,0]
4. Плоскость нормальная вектору [1,1,1]
Можно ли сделать поверхности тел полупрозрачными, а линии пересечения объектов явными?

Объекты 3. и 4. заданы не полностью, т.к. плоскость не определяется однозначно только своим нормальным вектором!
Всё то, о чём Вы пишите, сделать можно, только придётся много повозиться.

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Чт июн 30, 2011 8:02 am

1. А что еще требуется для задания плоскости?
2. Т.е. простых средств задания куба и сферы нет?
В справке для того, чтобы нарисовать куб нужно задать каждую его грань. Я надеялся, что есть способ проще, скажем, указанием вершин.

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Чт июн 30, 2011 8:20 am

serval писал(а):1. А что еще требуется для задания плоскости?
2. Т.е. простых средств задания куба и сферы нет?
В справке для того, чтобы нарисовать куб нужно задать каждую его грань. Я надеялся, что есть способ проще, скажем, указанием вершин.

1) Для задания плоскости нужно ещё указать точку, через которую она проходит.
2) Задать куб и сферу несложно средствами пакета plottools, а повозиться придётся именно с их пересечением!

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Чт июн 30, 2011 12:05 pm

Извините за некорректность. В данном случае, плоскости проходят через начала нормальных им векторов.
Спасибо за подсказку, буду изучать.

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Чт июн 30, 2011 8:46 pm

serval писал(а): В данном случае, плоскости проходят через начала нормальных им векторов.

А где эти начала? Вы их так и не задали! Вы указали только координаты самих нормальных векторов. Но в математике рассматриваются свободные векторы, их начала могут быть в любой точке!

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Чт июн 30, 2011 8:47 pm

В первом приближении получилось вот это
restart
with(plottools);
with(plots);
c:=cuboid([-1,-1,-1],[1,1,1]);
s:=sphere([0,0,0],sqrt(2));
display(c,s)

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Чт июн 30, 2011 8:56 pm

Задавая конец вектора я подразумевал, что он исходит из начала координат. В данной задаче все векторы нормали нужно понимать как радиус-векторы. Еще раз извиняюсь за неоднозначность.

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Чт июн 30, 2011 9:39 pm

serval писал(а):Задавая конец вектора я подразумевал, что он исходит из начала координат. В данной задаче все векторы нормали нужно понимать как радиус-векторы. Еще раз извиняюсь за неоднозначность.

Теперь всё понятно! Добавьте к своему рисунку ещё эти две плоскости и Вы уже можете представить как устроено Ваше тело. Надо только ещё уточнить - берётся область ниже плоскости x+y+z=0 или выше!
Далее Вы должны уяснить - что из себя представляют грани Вашего тела, задать их в Maple, используя команду plot3d . Кроме того, надо задать рёбра как пространственные кривые, используя команду plots[spacecurve] с помощью параметрических уравнений этих кривых. А в конце вывести всё на один график командой plots[display] .

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Чт июн 30, 2011 10:01 pm

Добавил
restart
with(plottools);
with(plots);
a:=PlanePlot(<1,1,1>):
b:=PlanePlot(<0, 1, 0>):
c:=cuboid([-1,-1,-1],[1,1,1]):
s:=sphere([0,0,0],sqrt(2)):
display(a,b,c,s)

но наглядности нет.
Мне нужны лишь линии пересечения объектов между собой (можно одним цветом) - окружности в сечении сферы плоскостями, квадрат и правильный шестиугольник в сечении куба теми же плоскостями, окружности в сечении сферы гранями куба.
Квадраты плоскостей не нужны.
Очень желательны полупрозрачные поверхности сферы, куба и фигуры сечений, но это по возможности.
Нет ли для этого столь же удобного инструмента, как plottools для построения самих объектов?

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Пт июл 01, 2011 10:51 pm

К сожалению в Maple с Вашим телом очень много возни, всё надо делать вручную. А вот в Mathematica 7 проблем никаких, всё построение одной строчкой:
RegionPlot3D[ x^2 + y^2 + z^2 < 2 && y > 0 && z > -x - y, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, PlotPoints -> 50]

Изображение

Если у Вас установлена Mathematica 7 скопируйте код, покрутите мышью. Это поможет Вам понять как устроено тело!

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Сб июл 02, 2011 2:32 pm

Вот чертёж Вашего тела в Maple с полупрозрачными гранями:

A := plot3d([r*cos(phi), r*sin(phi), 1], phi = 0 .. Pi, r = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
B1 := plot3d([1, r*sin(phi), r*cos(phi)], phi = 0 .. Pi, r = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
B2 := plot3d([-1, y, z], y = 0 .. 1, z = 1-y .. sqrt(1-y^2), style = surface, scaling = constrained, axes = normal, color = grey):
C1 := plot3d([r*cos(phi), 1, r*sin(phi)], phi = -(1/2)*Pi .. Pi, r = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
C2 := plot3d([-r*cos(phi), 1, -r*sin(phi)], phi = 0 .. (1/2)*Pi, r = 0 .. sqrt(2)/(2*sin(phi+(1/4)*Pi)), style = surface, scaling = constrained, axes = normal, color = grey):
E := plot3d([sqrt(2-x^2-y^2), -sqrt(2-x^2-y^2)], x = sqrt(1-y^2) .. 1, y = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
F := plot3d([sqrt(2-x^2-y^2)], x = -1 .. -sqrt(1-y^2), y = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
G := plots[spacecurve]({[-1, t, 1-t, t = 0 .. 1], [-1, sin(t), cos(t), t = 0 .. (1/2)*Pi], [1, 0, t, t = -1 .. 1], [1, sin(t), cos(t), t = 0 .. Pi], [t, 0, 1, t = -1 .. 1], [t, 0, -t, t = -1 .. 1], [t, 1, -1-t, t = -1 .. 0], [t, 1-t, -1, t = 0 .. 1], [cos(t), 1, sin(t), t = -(1/2)*Pi .. Pi], [cos(t), sin(t), -1, t = 0 .. (1/2)*Pi], [cos(t), sin(t), 1, t = 0 .. Pi]}, color = blue, thickness = 3):
K := plot3d(-x-y, x = -1 .. 1-y, y = 0 .. 1, style = surface, scaling = constrained, axes = normal, color = grey):
L := plot3d([u, 0, v], u = -1 .. 1, v = -u .. 1, style = surface, color = grey):
T := plots[textplot3d]({[0, 0, 1.7, "z"], [0, 1.7, 0, "y"], [1.7, 0, 0, "x"]}, align = [right, below], color = black, font = [TIMES, ROMAN, 16]):
plots[display](A, B1, B2, C1, C2, E, F, G, K, L, T, axes = normal, view = [-1.7 .. 1.7, -.8 .. 1.7, -1.7 .. 1.7], transparency = .2, labels = [" ", " ", " "], orientation = [30, 75]);


Изображение

Смотреть в стандартном интерфейсе!

serval
Сообщения: 140
Зарегистрирован: Пн авг 13, 2007 3:11 pm

Сообщение serval » Пн июл 04, 2011 10:25 am

Абалдеть! :D Огромное спасибо, буду вникать :)

Kitonum
Сообщения: 2079
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Пн июл 04, 2011 2:45 pm

serval писал(а):Абалдеть! :D Огромное спасибо, буду вникать :)

Пожалуйста! Спрашивайте, если что непонятно в коде, может быть кое-что можно и упростить.

hirnyk
Сообщения: 438
Зарегистрирован: Пт апр 08, 2005 1:41 pm

Сообщение hirnyk » Пн июл 11, 2011 1:23 pm

Kitonum писал(а):
serval писал(а):Абалдеть! :D Огромное спасибо, буду вникать :)

Пожалуйста! Спрашивайте, если что непонятно в коде, может быть кое-что можно и упростить.

implicitplot3d(max(x^2+y^2+z^2-2, -y, -x-y-z, -1+x, -1+x, y-1, y-1, z-1, z-1) <= 0, x = -2 .. 2, y = -2 .. 2, z = -2 .. 2, view = [-2 .. 2, -2 .. 2, -2 .. 2], numpoints = 20000, scaling = constrained)