Перемещение круга в октаве 4.2.1 Использование set () и drawCircle () - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь написать код, который имитирует движение каждой планеты вокруг Солнца в Солнечной системе, используя график в Октаве 4.2.1. Один из аспектов этого проекта состоит в том, чтобы солнце и все планеты на графике представляли собой круги определенного размера (то есть определенного радиуса) и чтобы каждый круг двигался. Проблема, с которой я столкнулся, заключается в использовании встроенной функции set () для установки новых значений x и y для центра каждого круга, который уже нарисован. Я не хочу перерисовывать каждый круг в каждой итерации моего цикла, потому что это вызывает очень прерывистое и непоследовательное движение, а с помощью функции set () это очень плавное и последовательное движение. Я был в состоянии использовать функцию set () для простой точки, используя дескриптор и функцию plot (). Но с функцией, которую я хочу использовать, которая является drawCircle (), использование функции set () всегда возвращает ошибку.

Вот простая версия (которая не работает) того, что я хочу сделать в моем реальном коде:

figure 1
  s=drawCircle(0,0,1);
  hold on
  axis([-2 2 -2 2])
  set(s,'x0', 1)

Этот код возвращает ошибку: «set: unknown line свойство x0». Чтобы быть более конкретным, я спрашиваю, как установить координаты x и y центра круга, нарисованного с помощью drawCircle (), используя функцию set (), после того, как он нарисован. Я был бы очень признателен, если у кого-нибудь есть идеи о том, как заставить это работать, или какие-либо альтернативные обходные пути для достижения того же самого.

1 Ответ

0 голосов
/ 30 апреля 2018

Мне кажется, это то, что вы хотите:

clear;clf
th=2*pi*linspace(0,1,19);xc=cos(th);yc=sin(th);
h=plot(xc,yc,'linewidth',1);
axis([-2 2 -2 2]);
pause
x=get(h,'xdata');y=get(h,'ydata');
set(h,'xdata',x+1,'ydata',y+0.5)
...