Я пытаюсь сделать серф сюжет, который выглядит как:Matlab - Вычитание двух 3D фигуры с серфинга и минимальной функции
До сих пор у меня есть:
x = [-1:1/100:1];
y = [-1:1/100:1];
[X,Y] = meshgrid(x,y);
Triangle1 = -abs(X) + 1.5;
Triangle2 = -abs(Y) + 1.5;
Z = min(Triangle1, Triangle2);
surf(X,Y,Z);
shading flat
colormap winter;
hold on;
[X,Y,Z] = sphere();
Sphere = surf(X, Y, Z + 1.5);% sphere with radius 1 centred at (0,0,1.5)
hold off;
Этот код производит график, который выглядит следующим образом:
Пирамида с квадратным основанием ([-1,1] x [-1,1]) и вершина на высоте c = 1,5 над началом координат (0,0).
Вершина пирамиды выдолблена путем удаления ее части, которая попадает в сферу радиуса r = 1, центрированную в вершине.
Поэтому мне нужно сохранить часть поверхности сферы, находящуюся внутри пирамиды, и удалить остальную часть. Обратите внимание, что ось y на каждом графике отличается, поэтому второй график выглядит немного сжатым. Да, в эту сферу есть пирамида, которую трудно понять с этого угла.
Я буду использовать углы обзора 70 (азимут) и 35 (высота). И убедитесь, что оси правильно масштабированы (как показано). Я буду использовать опцию AXIS TIGHT, чтобы получить правильные размеры после удаления соответствующей поверхности сферы.
Это действительно вызов, чтобы сделать в MATLAB, это не правильный инструмент для такого рода геометрии композиции. Не сказать, что это невозможно, но нет примитивов, чтобы помочь вам это сделать. Вы должны написать код, чтобы выполнить все вычисления, чтобы определить точки пересечения и соответствующим образом обработать их, чтобы получить поверхность. Не для слабонервных. – Cyb3rFly3r
Может быть альтернативный способ создания сюжета, который вы показали, но я не уверен, подходит ли вам этот метод. Вы можете использовать уравнения для плоских поверхностей/сферы для определения значений явных точек в виде 'z = f (x, y)'. Затем вы можете использовать 'meshgrid' для генерации данных для сюжета' surf', который должен создать сюжет, который вы показали. Если решение подходит для вас, я могу создать код - сообщите мне. – user1391279