Построение параметризованного трехмерного круга в MATLAB - PullRequest
2 голосов
/ 22 июля 2011

Я новичок в MATLAB, и у меня есть фундаментальная проблема, для которой у меня проблемы с поиском онлайн-ресурсов. У меня есть уравнение для круга: C = центр + (радиус * cos (тета)) + (радиус * грех (тета)). Я хочу изобразить этот круг ДОПОЛНИТЕЛЬНО к другим вещам, которые я рисую заранее ... все в 3D. Я попытался использовать theta = linspace (0,2 * pi), но затем при построении моего уравнения для круга говорится, что размеры матрицы не совпадают! Если бы вы могли предложить любую помощь, это было бы здорово!

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Вот пример построения круга с заданным радиусом и центром (и предполагая, что круг лежит в плоскости z = 0):

radius = 2;      %# Define your radius
center = [1 2];  %# Define your circle center [Cx Cy]
theta = linspace(0,2*pi);          %# Create an array of theta values
X = center(1)+radius.*cos(theta);  %# Create the X values for the circle
Y = center(2)+radius.*sin(theta);  %# Create the Y values for the circle
Z = zeros(size(X));                %# Create the Z values for the circle (needed
                                   %#   for 3D plotting)
hold on;       %# Add to the current existing plot
plot3(X,Y,Z);  %# Plot your circle in 3D

А вот некоторые ссылки на онлайн-ресурсы, которые должны бытьХорошая отправная точка для изучения основ черчения в MATLAB:

1 голос
/ 23 июля 2011

Поскольку круг по сути является двухмерной сущностью, вам необходимо сгенерировать точки, представляющие его, на некоторой известной двухмерной плоскости, встроенной в трехмерное пространство.Тогда вы сможете вращать, масштабировать и переводить его по своему усмотрению.

Простой демонстрационный код, надеюсь, прояснит:

n= 78; theta= linspace(0, 2* pi, n); c= [1 2 3]'; r= sqrt(2);

points= r*[cos(theta); sin(theta); zeros(1, n)]+ repmat(c, 1, n);
plot3(points(1,:), points(2,:), points(3,:), 's-')
axis equal, hold on

R= rref([rand(3) eye(3)]); R= R(:, 4: 6);
points= R* points;
plot3(points(1,:), points(2,:), points(3,:), 'ro')
0 голосов
/ 22 июля 2011

Я не уверен, что вы пытаетесь сделать, но рассмотрите этот пример:

theta = linspace(0,2*pi,100);
C = [0;0];
r =  1;

p = bsxfun(@plus, r.*[cos(theta);sin(theta)], C);
plot(p(1,:), p(2,:), '.-')
axis equal

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...