Скачиваний:
5
Добавлен:
28.04.2022
Размер:
8.07 Кб
Скачать

clc;

clear all;

disp('Введите координаты точек начала (X1,Y1) и конца (X2,Y2) прямой')

X1=input('X1= ');

Y1=input('Y1= ');

Z1=input('Z1= ');

X2=input('X2= ');

Y2=input('Y2= ');

Z2=input('Z2= ');

plot3([X1 X2], [Y1 Y2], [Z1 Z2])

hold on

grid on

xlabel('x')

ylabel('y')

zlabel('z')

% xlim([-3 10])

% ylim([-5 10])

% zlim([-3 3])

%Есть плоскоть заданная тремя точками, т.е. треугольник

A = [1,1,0];

B = [5,3,0];

C = [3,4,1];

%График треугольника и прямой

Xtri = [1,5,3,1]; %Вектора координат треугольника для команды plot3

Ytri = [1,3,4,1];

Ztri = [0,0,1,0];

plot3(Xtri,Ytri,Ztri)

hold on

grid on %Рисует синим треугольник

% Формируем вектор (прямая) из двух координат точек

Pramaya = [X1,Y1,Z1; X2,Y2,Z2];

PramayaRaz = [X2-X1,Y2-Y1,Z2-Z1]; %Приведение вектора-прямой к декартовой системе координат

%Наждение вектора нормальли к плоскости. Для этого возьмем коэфициенты из

%уравнения плоскости aх+bу+cz+d=0

a=2;

b=-4;

c=8;

d=2;

n=[2,-4,8]; %нормаль плоскости треугольника

%Прямая пересекает плоскость тогда и только тогда, когда её направляющий вектор

%не ортогонален вектору нормали плоскости.

if dot(PramayaRaz,n)==0

disp('непересекает, так как векторы ортогональны')

else

disp('Прямая пересекает плоскость теругольника')

t=((-a*X1-b*Y1-c*Z1-d)/(a*(X2-X1)+b*(Y2-Y1)+c*(Z2-Z1)));

x0=(X2-X1)*t+X1;

y0=(Y2-Y1)*t+Y1;

z0=(Z2-Z1)*t+Z1;

disp('Точка пересечения равна')

[x,y,z]=sphere(30);

surf(0.05*x+x0,0.05*y+y0,0.05*z+z0)

P=[x0,y0,z0];

disp(P);

end

%Нужно определить прнадлежность точки к плоскости треугольника.

%Найдем длину сторон треугольника

AB=sqrt(20);%Длина стороны АВ

BC=sqrt(6);%Длина стороны ВС

CA=sqrt(14);%Длина стороны ВС

Pabc=(AB+BC+CA)/2;%Периметр треугольника АВС

AP=sqrt(((x0-1)^2)+((y0-1)^2)+((z0-0)^2));%Длина стороны АР

BP=sqrt(((x0-5)^2)+((y0-3)^2)+((z0-0)^2));%Длина стороны ВР

CP=sqrt(((x0-3)^2)+((y0-4)^2)+((z0-1)^2));%Длина стороны СР

Papb=(AP+BP+AB)/2;%Периметр треугольника АРВ

Papc=(AP+CP+CA)/2;%Периметр треугольника АРС

Pbpc=(BP+CP+BC)/2;%Периметр треугольника РВС

Sabc=sqrt(Pabc*(Pabc-AB)*(Pabc-BC)*(Pabc-CA));%Площадь треугольника АВС

% Sabc=round((Sabc*100+0.05)/100);

Sapb=sqrt(Papb*(Papb-AP)*(Papb-BP)*(Papb-AB));%Площадь треугольника АРС

Sapc=sqrt(Papc*(Papc-AP)*(Papc-CP)*(Papc-CA));%Площадь треугольника АРС

Sbpc=sqrt(Pbpc*(Pbpc-BP)*(Pbpc-CP)*(Pbpc-BC));%Площадь треугольника РВС

% S=round(((Sapb+Sapc+Sbpc)*100-0.5)/100);

if Sabc>=Sapb+Sapc+Sbpc

disp('Точка принадлежит плоскости треугольника')

else

disp('Точка не принадлежит плоскости треугольника')

end

Соседние файлы в папке курсачи