Используйте сферические координаты:
Как и в случае с вашим сферным сегментом, легче сначала определить вашу линию в сферических координатах, а затем преобразовать в декартову, когда пришло время отображать.Если вы добавите это после своего собственного кода:
% set line parameters
np = 10 ; % number of points
LineAziStart = 17 ; % Starting azimuth
LineAziStop = 122 ; % Ending azimuth
LineElevation = 49 ; % Elevation
% generate spherical coordinates
azp = linspace(deg2rad(LineAziStart),deg2rad(LineAziStop),np).' ;
elp = zeros(np,1) + deg2rad(LineElevation) ;
rp = zeros(np,1) + radius ;
% convert to cartesian
[xp,yp,zp]=sph2cart(azp,elp,rp) ;
% adjust coordinates for center of the sphere
xp = xp + c(1) ;
yp = yp + c(2) ;
zp = zp + c(3) ;
% display
hp = plot3(xp,yp,zp,'g','LineWidth',2,'Marker','x') ;
Вы получите линию, параллельную заданной широте:
Вы можете указать, гделиния начинается, останавливается и поднимается, настраивая первые параметры в верхней части кода (чтобы они соответствовали вашим собственным значениям).
Редактирование: Для объяснения сферической координатыпоколение: чтобы получить линию в 3D, вам нужен набор из 3 координат, они могут быть x/y/z
( декартовой референцией ) или radius/azimuth/elevation
( сферической референцией ).
Ограничения для вашей линии:
Азимут: (называемый azp
) Должен варьироваться от одного значения к другому.Для этого я использовал утверждение azp = linspace(deg2rad(LineAziStart),deg2rad(LineAziStop),np).' ;
.Я рекомендую вам прочитать документацию по функции linspace
.Он сгенерирует набор np
линейно расположенных точек между LineAziStart
и LineAziStop
.Я также должен был использовать deg2rad
, потому что для сферических координат вы хотите, чтобы ваши углы выражались в радиан .
Радиус: (называемый rp
) Это легко.Ваша линия должна находиться на поверхности сферы, поэтому все точки линии будут иметь одинаковое значение radius
( радиус исходной сферы. Мы просто генерируем вектор np
все точки равны радиусу. Это делается с помощью rp = zeros(np,1) + radius;
.
Высота: (называемый elp
) Ваша линия должна быть параллельна широте,поэтому высота также постоянна для всех точек линии.Как и с радиусом, мы генерируем множество постоянных точек одинаково: elp = zeros(np,1) + deg2rad(LineElevation) ;
.
К тому времени у вас есть набор из 3 векторов (rp/azp/elp
), которые имеют одинаковое количество значений и вместе определяют набор точек в трехмерном пространстве в сферических координатах. Для функции построения графиков Matlab требуются декартовы координаты, поэтому последнийшаг - просто преобразовать этот набор координат. Это делается с помощью функции sph2cart
, которая преобразует rp/azp/elp
в xp/yp/zp
. Сферические координаты, которые мы сгенерировали, были центрированы в начале координат (точка 0,0,0,
), поэтому конвекЗдесь также есть координаты декартовых координат.Последний шаг - просто перевести эти координаты, чтобы они были центрированы в той же точке / центре, что и сфера.После этого ваши координаты готовы к построению.