Возможна ли разработка приложения на Octave с GUI? |
Векторная алгебра и аналитическая геометрия
6.2 Аналитическая геометрия
Плоскость, проходящая через точку и перпендикулярная к вектору представляется уравнением или .
Вектор называется нормальным вектором плоскости.
Пример 6.13. Записать уравнение и построить плоскость, проходящую через точку и перпендикулярную вектору .
Исходя из условия примера уравнение плоскости имеет вид .
Для построения плоскости средствами Octave преобразуем уравнение плоскости к виду функции двух переменных:
Решение примера представлено в листинге 6.13 и на рис. 6.10
clf; cla; set(gcf, ’Position’, [ 20, 20, 400, 400 ] ); axis ( [ 0, 1 0, 0, 1 0, 0, 1 0 ] ) A=3;B=0;C=_3;D=6;N=[A, B,C ]; % Параметры плоскости b0= - D/C; b1= - A/C; b2= - B/C; % Параметры уравнения плоскости, преобразо% ванного к функции двух переменных % Построение плоскости xk=5;yk=5; X= 0 : 0.5 : xk;Y= 0 : 0.5 : yk; [ x, y]= meshgrid(X,Y); z=b0+b1*x+b2 * y; surf( x, y, z ), colormap gray grid on; xlabel ( ’x’, ’FontSize’, 2 0 ); ylabel( ’y’, ’FontSize’, 2 0 ); zlabel( ’z’, ’FontSize’, 2 0 ); set( gca, ’FontSize’, 1 2 ); set ( gca, ’box’, ’on’ ); % Построение направляющего вектора line( [ xk, 0 ], [ 0, 0 ], [ b0, yk+b0 ], ’LineWidth’, 5, ’Color’, ’k’ ); line( [ 0, 0 ], [ 0, 0 ], [ yk+b0, yk+b0 ], ’LineWidth’, 5, ’Color’, ’k’, ’ marker’, ’v’, ’markersize’, 1 6 ); text(0+0.3,0+0.3, yk+b0 _1, ’N’, ’FontSize’, 2 0 ); title( ’3x-3z+6=0’, ’FontSize’, 2 0 ) % ЗаголовокЛистинг 6.13. Построение плоскости по точке и вектору (пример 6.13).
Если плоскость проходит через заданную точку и параллельна плоскости , то её уравнение записывают так .
Пример 6.14. Записать уравнение и построить плоскость, проходящую через точку параллельно плоскости .
Уравнение плоскости имеет вид: .
Решение примера показано на рис. 6.11 и в листинге 6.14.
function p=plos(A, B, C,D) % Параметры уравнения плоскости, преобразованного b0= - D/C; b1= - A/C; b2= - B/C; % к функции двух переменных % Построение плоскости xk=5;yk=5; X= 0 : 0.5 : xk;Y= 0 : 0.5 : yk; [ x, y]= meshgrid(X,Y); z=b0+b1 * x+b2 * y; surf( x, y, z ), colormap gray grid on; p=0; end; clf; cla; set( gcf, ’Position’, [ 20, 20, 400, 400 ] ); axis( [ 0, 10, 0, 10, 0, 10 ] ) A1=3;B1=0;C1=_3;D1=6; % Параметры плоскости % Построение плоскостей plos(A1, B1, C1, D1) hold on A2=3;B2=0;C2=_3;D2=12; p=plos(A2, B2, C2, D2) xlabel( ’x’, ’FontSize’, 2 0 ); ylabel( ’y’, ’FontSize’, 2 0 ); zlabel( ’z’, ’FontSize’, 2 0 ); set( gca, ’FontSize’, 1 2 ); set( gca, ’box’, ’on’ ); M= [ 1, 3, 5 ]; % Изображение точки line( [M( 1 ),M( 1 ) ], [M( 2 ),M( 2 ) ], [M( 3 ),M( 3 ) ], ’LineWidth’, 5, ’Color’ , ’k’, ’marker’, ’o’, ’markersize’, 1 6 ); text(M( 1 ) _0.5,M( 2 ) +0.5,M( 3 ) +1, ’M(1,3,5)’, ’FontSize’, 2 0 ); title( ’3x-3z+6=0,3x-3z+12=0’, ’FontSize’, 2 0 )Листинг 6.14. Построение плоскости по параллельной ей плоскости и точке (пример 6.14).
Если три точки и не лежат на одной прямой, то уравнение плоскости, проходящей через них, представляется уравнением:
Пример 6.15. Записать уравнение и построить плоскость, проходящую через точки и .
Заданные точки не лежат на одной прямой, так как векторы и не коллинеарны. ли. 6.12 и рис. 6.13 иллюстрируют это утверждение. Изображение на рис. 6.12 получено в результате работы программы показанной в листинге 6.15. Рис. 6.13 получен из ррис. 6.12ис путём поворота2Аналитически поворот можно осуществить с помощью функции view, например, view(37.5,30); вернуть рисунок в исходное состояние можно командой view(2) (прим. редактора ). в графическом окне.
clf; cla; set( gcf, ’Position’, [ 20, 20, 400, 400 ] ); set( gca, ’Position’, [ . 1, . 1, . 8, . 8 ] ); set( gca, ’xlim’,[0,3]); set ( gca, ’ylim’,[0,3]); set ( gca, ’zlim’,[0,3]); set( gca, ’xtick’,[0:3]); set ( gca, ’ytick’,[0:3]); set ( gca, ’ztick’,[0:3]); set( gca, ’box’, ’on’ ); xlabel ( ’x’ ); ylabel ( ’y’ ); zlabel ( ’z’ ); axis( [ 0, 3, 0, 3, 0, 3 ] ) grid on; M0= [ 1, 2, 3 ];M1= [ 2, 1, 2 ];M2= [ 3, 3, 1 ]; % Исходные данные % Изображение векторов M0M1 и M0M2 line ([M1(1),M0(1)],[M1(2),M0(2)],[M1(3),M0(3)],’LineWidth’,5,’Color’,’k’); line ([M2(1),M0(1)],[M2(2),M0(2)],[M2(3),M0(3)],’LineWidth’,5,’Color’,’k’); % Изображение стрелок на векторах line ([M1(1),M1(1)],[M1(2),M1(2)],[M1(3),M1(3)], ’LineWidth’, 5, ’Color’, ’k ’, ’marker’, ’>’, ’markersize’, 10 ); line ([M2(1),M2(1)],[M2(2),M2(2)],[M2(3),M2(3)], ’LineWidth’, 5, ’Color’, ’k ’, ’marker’, ’<’, ’markersize’, 10 ); line ([M0(1),M0(1)],[M0(2),M0(2)],[M0(3),M0(3)], ’LineWidth’, 5, ’Color’, ’k ’, ’marker’, ’o’, ’markersize’, 10 ); % Подписи text(M0( 1 ),M0( 2 ) +0.3,M0( 3 ), ’M0’, ’FontSize’, 2 0 ); text(M1( 1 ),M1( 2 ) +0.3,M1( 3 ), ’M1’, ’FontSize’, 2 0 ); text(M2( 1 ),M2( 2 ) +0.3,M2( 3 ), ’M2’, ’FontSize’, 2 0 );Листинг 6.15. Построение векторов по трём точкам (пример 6.15).
Плоскость представлена уравнением:
Графическое изображение плоскости показано на рис. 6.14. Текст программы в листинге 6.16.
clf; cla; set ( gcf, ’Position’, [ 20, 20, 400, 400] ); axis ( [ 0, 10, 0, 10, 0, 10 ] ) A=1;B=0;C=1;D=-4;N=[A, B,C ]; % Параметры плоскости % Параметры уравнения плоскости, преобразованного % к функции двух переменных b0= - D/C; b1= - A/C; b2= - B/C; % Построение плоскости xk=3;yk=3;X= 0 : 0.5 : xk;Y= 0 : 0.5 : yk; [ x, y]= meshgrid(X,Y); z=b0+b1*x+b2 * y; surf ( x, y, z ), colormap gray grid on; xlabel ( ’x’, ’FontSize’, 20 ); ylabel ( ’y’, ’FontSize’, 20 ); zlabel ( ’z’, ’FontSize’, 20 ); set ( gca, ’FontSize’, 12 ); set ( gca, ’box’, ’on’ ); % Построение направляющего вектора line ( [ xk, 0 ], [ 0, 0 ], [ b0, b0_yk ], ’LineWidth’, 5, ’Color’, ’k’ ); line ( [ xk, xk ], [ 0, 0 ], [ b0, b0 ], ’LineWidth’, 5, ’Color’, ’k’, ’marker’, ’v’, ’markersize’, 16 ); text (0+0.3,0+0.3, b0-yk, ’N’, ’FontSize’, 20 ); % Исходные данные M0= [ 1, 2, 3 ];M1= [ 2, 1, 2 ];M2= [ 3, 3, 1 ]; % Нанесение точек на график line ( [M1( 1 ),M1( 1 ) ], [ M1( 2 ),M1( 2 ) ], [ M1( 3 ),M1( 3 ) ], ’LineWidth’, 5, ’ Color’, ’k’, ’marker’, ’o’, ’markersize’, 10 ); line ( [M2( 1 ),M2( 1 ) ], [ M2( 2 ),M2( 2 ) ], [ M2( 3 ),M2( 3 ) ], ’LineWidth’, 5, ’ Color’, ’k’, ’marker’, ’o’, ’markersize’, 10 ); line ( [M0( 1 ),M0( 1 ) ], [ M0( 2 ),M0( 2 ) ], [ M0( 3 ),M0( 3 ) ], ’LineWidth’, 5, ’ Color’, ’k’, ’marker’, ’o’, ’markersize’, 10 ); % Подписи text (M0( 1 ) -0.3,M0( 2 ) -0.3,M0( 3 ), ’M0’, ’FontSize’, 20 ); text (M1( 1 ) -0.3,M1( 2 ) -0.3,M1( 3 ), ’M1’, ’FontSize’, 20 ); text (M2( 1 ) -0.3,M2( 2 ) -0.3,M2( 3 ), ’M2’, ’FontSize’, 20 ); % Заголовок title ( ’x+z-4=0’, ’FontSize’, 20 )Листинг 6.16. Построение плоскости по трём точкам (Пример 6.15).
Если плоскость не параллельна оси OX , то она отсекает на этой оси отрезок . Аналогично отрезки на осях OY, OZ будут и . Таким образом, плоскость отсекающую на осях отрезки и можно представить уравнением
которое называется уравнением плоскости в отрезках.
Пример 6.16. Написать уравнение плоскости в отрезках и построить эту плоскость.
Найдём длины отрезков: .
Запишем уравнение плоскости в отрезках:
Решение примера показано на рис. 6.15 и в листинге 6.17.
clf; cla; a =4;b=_2;c =6; set( gcf, ’Position’, [ 50, 50, 400, 400 ] ); axis ( [ 0, a, 0, b, 0, c ] ); X= 0 : 0.2 : a;Y=b : 0.2 : 0; [ x y]= meshgrid(X,Y); z=c-c /a * x-c /b * y; hfig=surf ( x, y, z ); set( hfig, ’FaceColor’, ’none’, ’EdgeColor’, ’k’ ) % Изображение векторов a, b и c line( [ 0, a ], [ 0, 0 ], [ 0, 0 ], ’LineWidth’, 5, ’Color’, ’k’ ); line( [ 0, 0 ], [ 0, b ], [ 0, 0 ], ’LineWidth’, 5, ’Color’, ’k’ ); line( [ 0, 0 ], [ 0, 0 ], [ 0, c ], ’LineWidth’, 5, ’Color’, ’k’ ); % Подписи text( a / 2, 0, 1, ’a’, ’FontSize’, 20 ); text( 0, b / 2, 1, ’b’, ’FontSize’, 20 ); text( 0.2, 0, c /2, ’c’, ’FontSize’, 20 ); % Заголовок title( ’a=4, b=-2, c=6’, ’FontSize’, 14 ) xlabel( ’x’ ); ylabel ( ’y’ ); zlabel ( ’z’ ); set( gca, ’Position’, [ .1, .1, .8, .8 ] ); set( gca, ’View’, [ 25 22 ] )Листинг 6.17. Уравнение плоскости в отрезках (пример 6.16).