Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Ускорение при помощи векторов

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Этот скетч-пример демонстрирует основы движения при помощи векторов. В объекте Mover в виде векторов хранятся данные о позиции, скорости и ускорении. Движение управляется при помощи воздействия на величину ускорения (в данном случае – в сторону курсора мышки).

О том, как симулировать физику и движение тел при помощи векторов, можно также почитать в примере «Силы (гравитация и сопротивление жидкости) с векторами».

Пример

  1. // объект Mover:
  2. Mover mover;
  3.  
  4. void setup() {
  5.   size(640,360);
  6.   mover = new Mover();
  7. }
  8.  
  9. void draw() {
  10.   background(0);
  11.  
  12.   // обновляем позицию:
  13.   mover.update();
  14.   // показываем объект Mover:
  15.   mover.display();
  16. }
  17.  
  18.  
  19.  
  20.  
  21. /**
  22.  * Ускорение при помощи векторов
  23.  * Автор – Дэниэл Шиффман.  
  24.  *
  25.  * Демонстрирует основы движения при помощи векторов.
  26.  * Объект Mover в виде векторов хранит позицию, скорость и ускорение.
  27.  * Управление движением осуществляется при помощи воздействия
  28.    на ускорение (в данном случае – в сторону курсора мышки).
  29.  */
  30.  
  31.  
  32. class Mover {
  33.  
  34.   // объект Mover (шар) отслеживает позицию, скорость и ускорение:
  35.   PVector location;
  36.   PVector velocity;
  37.   PVector acceleration;
  38.   // максимальная скорость объекта Mover:
  39.   float topspeed;
  40.  
  41.   Mover() {
  42.     // шар начнет движение в центре экрана:
  43.     location = new PVector(width/2,height/2);
  44.     velocity = new PVector(0,0);
  45.     topspeed = 5;
  46.   }
  47.  
  48.   void update() {
  49.    
  50.     // рассчитываем вектор,
  51.     // указывающий от позиции шара в сторону курсора мышки:
  52.     PVector mouse = new PVector(mouseX,mouseY);
  53.     PVector acceleration = PVector.sub(mouse,location);
  54.     // задаем длину вектора ускорения:
  55.     acceleration.setMag(0.2);
  56.    
  57.     // скорость меняется при помощи добавления ускорения:
  58.     velocity.add(acceleration);
  59.     // ограничиваем скорость значением «topspeed»:
  60.     velocity.limit(topspeed);
  61.     // меняем позицию в зависимости от скорости:
  62.     location.add(velocity);
  63.   }
  64.  
  65.   void display() {
  66.     stroke(255);
  67.     strokeWeight(2);
  68.     fill(127);
  69.     ellipse(location.x,location.y,48,48);
  70.   }
  71.  
  72. }

См.также

Внешние ссылки

  1. processing.org - Acceleration with Vectors by Daniel Shiffman.