Курсовая Призма в Maple
Работа добавлена на сайт bukvasha.net: 2015-10-25Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Курсовая работа
Тема работы: «Призма в Maple»
Я не я
Содержание
Введение ______________________________________________3
Построение призмы в Maple ______________________________ 4
Проверка компланарности введенных точек основания призмы _7
Примеры использования данной процедуры ________________ 8
Введение
Maple — программный пакет, система компьютерной алгебры. Создана в компании Waterloo Maple Inc., которая основана в 1984 году и выпускает и продвигает на рынке ряд программных продуктов, ориентированных на сложные математические вычисления, визуализацию данных и моделирование. Система Maple предназначена для символьных вычислений, хотя имеет ряд средств и для численного решения дифференциальных уравнений и нахождения интегралов. Обладает развитыми графическими средствами. Имеет собственный язык программирования, частично подобный Паскалю.
В нем есть много встроенных пакетов, и с помощью этой программы можно выполнить практически любое вычисление или построение.
Но в нем нет некоторых, казалось бы нужных функций.
В своей работе я собираюсь написать процедуру построения призмы, которая позволит более быстро получить пользователю нужную призму с заданными параметрами.
Построение призмы в Maple
Далее будет пошагово описана процедура построения призмы.
Задаем формальные аргументы процедуры:
X - список имён вершин основания (указывать надо в порядке обхода против или по часовой стрелке),
Y - список координат этих вершин (в том же порядке),
Z - список координат той вершины верхнего основания, которая соответствует первой в списке Y.
Prism:=proc(X::list(symbol),Y::list(list),Z::list)
Далее записываем список локальных переменных, которые будут использоваться в теле процедуры.
local R,L,L1,L2,T,T1:
Множеству R присваиваем разность между заданной точкой первого основания, и точкой второго основания, предполагается, что точка второго основания соответствует первой точке первого основания.
R:=seq(Z[i]-Y[1][i],i=1..3):
Создаем основание нашей будущей призмы
L:=plottools[polygon](Y,style=line,color=blue,thickness=2):
Строим линии от вершин многоугольника в основании используя значения полученные при расчете R
L1:=seq(plottools[line](Y[i],[Y[i][1]+R[1],Y[i][2]+R[2],Y[i][3]+R[3]],color=blue,thickness=2),i=1..nops(Y)):
Строим второе основание:
L2:=plottools[polygon]([seq([Y[i][1]+R[1],Y[i][2]+R[2],Y[i][3]+R[3]],i=1..nops(Y))],style=line,color=blue,thickness=2):
Теперь показываем обозначение вершин первого основания:
T:=plots[textplot3d]([seq([op(Y[i]),X[i]],i=1..nops(X))],align={above,left},color=black,font=[TIMES,ROMAN,18]):
Теперь показываем обозначение вершин второго основания, добавляя штрихи к буквам:
T1:=plots[textplot3d]([seq([op(Y[i])[1]+R[1],op(Y[i])[2]+R[2],op(Y[i])[3]+R[3],cat(X[i],"'")],i=1..nops(X))],align={above,right},color=black,font=[TIMES,ROMAN,18]):
Выводим элементы призмы:
L,L1,L2,T,T1:
В итоге у нас получилась такая процедура:
Prism:=proc(X::list(symbol),Y::list(list),Z::list)
local R,L,L1,L2,T,T1:
R:=seq(Z[i]-Y[1][i],i=1..3):
L:=plottools[polygon](Y,style=line,color=blue,thickness=2):
L1:=seq(plottools[line](Y[i],[Y[i][1]+R[1],Y[i][2]+R[2],Y[i][3]+R[3]],color=blue,thickness=2),i=1..nops(Y)):
L2:=plottools[polygon]([seq([Y[i][1]+R[1],Y[i][2]+R[2],Y[i][3]+R[3]],i=1..nops(Y))],style=line,color=blue,thickness=2):
T:=plots[textplot3d]([seq([op(Y[i]),X[i]],i=1..nops(X))],align={above,left},color=black,font=[TIMES,ROMAN,18]):
T1:=plots[textplot3d]([seq([op(Y[i])[1]+R[1],op(Y[i])[2]+R[2],op(Y[i])[3]+R[3],cat(X[i],"'")],i=1..nops(X))],align={above,right},color=black,font=[TIMES,ROMAN,18]):
L,L1,L2,T,T1:
end proc:
Проверка компланарности введенных точек основания призмы
Для корректной работы процедуры необходимы правильные координаты точек основания, в частности, необходимо, чтобы все точки основания лежали в одной плоскости. Чтобы проверить это условие необходимо создать специальную процедуру. Ниже приведено построение этой процедуры.
Задаем формальные аргументы процедуры:
X - список имён вершин основания (указывать надо в порядке обхода против или по часовой стрелке),
Y - список координат этих вершин (в том же порядке),
fl - переменная булеановского типа.
Coplanar:=proc(X::list(symbol),Y::list(list),fl)
Вводим локальные переменные:
local N,S,k;
Обнуляем переменную N, которая будет использоваться в качестве счетчика.
N:=0;
Проверяем необходимость данной проверки, если количество точек основания равна трем, данная проверка не нужна.
if nops(X)>3 then
Формируем множество состоящее из точек основания:
S:=seq(geom3d[point](X[i],Y[i][1],Y[i][2],Y[i][3]),i=1..nops(X));
Запускаем цикл проверки на компланарность трех последовательных точек основания:
for k from 1 to nops(X)-3 do
if not geom3d[AreCoplanar](X[k],X[k+1],X[k+2],X[k+3]) then N:=N+1 fi od fi;
Если значение N больше 0, значит нашлась комбинация из 4х точек не лежащих в одной плоскости, в этом случае процедура выводит сообщение об ошибке, а также присваивает переменной fl значение false.
if N>0 then print(Error); print(Povtorite); print(vvod); fl:=false fi;
Получили такую процедуру:
Coplanar:=proc(X::list(symbol),Y::list(list),fl)
local N,S,k;
N:=0;
if nops(X)>3 then
S:=seq(geom3d[point](X[i],Y[i][1],Y[i][2],Y[i][3]),i=1..nops(X));
for k from 1 to nops(X)-3 do
if not geom3d[AreCoplanar](X[k],X[k+1],X[k+2],X[k+3]) then N:=N+1 fi od fi;
if N>0 then print(Error); print(Povtorite); print(vvod); fl:=false fi;
end proc:
Чтобы активизировать эту проверку, необходимо включить ее в исходную процедуру следующим образом:
Добавить переменную flag, ее положительное значение будет разрешать построение призмы, а затем обратиться к процедуре.
global flag;
flag:=true:
Coplanar(X,Y,flag);
Пример использования данной процедуры:
plots[display](Prism([A,B,C,D,E],[[0,0,0],[0.5,-1,0],[1,0,0],[1,1.5,0],[0,1.5,0]],[0,1/sqrt(3),1]));
Также можно построить призму с сечением:
plots[display](Prism([A,B,C,D],[[0,0,0],[1,0,0],[1,1.5,0],[0,1.5,0]],[0,1/sqrt(3),1]),plottools[polygon]([[1,1/sqrt(3),1],[0,1/sqrt(3)+1.5,1],[1,1/2/sqrt(3)+1.5,1/2]],color=grey),plots[textplot3d]([1,1/2/sqrt(3)+1.5,1/2,E],font=[TIMES,ROMAN,18],color=black),scaling=constrained,orientation=[-35,70]);