У меня есть код, который генерирует два случайных набора данных в трехмерном пространстве и использует программное обеспечение выпуклой оптимизации из http://cvxr.com/cvx/ для линейного разделения данных.У меня есть 3D-график, который отображает оси координат, разделяющие данные, но я бы хотел вместо этого построить плоскость разделения.Код построения оси приведен ниже.Кажется, что должен быть простой способ изменить это, так как у меня есть вектор нормали к плоскости, но я изо всех сил пытаюсь фактически сделать эту модификацию.Прочитав документацию, такую как https://www.mathworks.com/help/matlab/ref/fimplicit3.html и просматривая различные SO-потоки, я просто ищу то, что может быть самой простой реализацией.
function drawCoordinateAxes3d(a,b,p1,p2)
an=a/norm(a);
d=b/norm(a);
c=d*an; %point on the line a distance d from the origin
V=null(an'); %to generate a coordinate system, find two vectors orthogonal to an
V=[an V]; %out all three axes in a single matrix
Axis1=[V(:,1),-V(:,1)]; % put two endpoints of axes into Axis1
Axis2=[V(:,2),-V(:,2)];
Axis3=[V(:,3),-V(:,3)];
Axis1=Axis1+[c,c];
Axis2=Axis2+[c,c];
Axis3=Axis3+[c,c];
hold on
axis equal
view(45,45)
plot3(Axis1(1,:),Axis1(2,:),Axis1(3,:),'LineWidth',2);
plot3(Axis2(1,:),Axis2(2,:),Axis2(3,:),'LineWidth',2);
plot3(Axis3(1,:),Axis3(2,:),Axis3(3,:),'LineWidth',2);
% plot all points
for i=1:length(p1)
plot3(p1(1,i),p1(2,i),p1(3,i),'o','MarkerSize',3,'MarkerEdgeColor','k','MarkerFaceColor','g')
hold on
end
for i=1:length(p2)
plot3(p2(1,i),p2(2,i),p2(3,i),'o','MarkerSize',3,'MarkerEdgeColor','k','MarkerFaceColor','r')
hold on
end
grid on
hold off