Processing:Примеры/Ускорение при помощи векторов: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Processing панель перехода}}
{{Processing панель перехода}}
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Описание<ref>[https://processing.org/examples/accelerationwithvectors.html processing.org - Acceleration with Vectors by Daniel Shiffman.]</ref>=
=Описание<ref>[https://processing.org/examples/accelerationwithvectors.html processing.org - Acceleration with Vectors by Daniel Shiffman.]</ref>=
Строка 97: Строка 94:
}}
}}


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
// объект Mover:
// объект Mover:
Mover mover;
Mover mover;
Строка 178: Строка 175:
<references />
<references />


{{SEO
{{Навигационная таблица/Портал/Processing}}
|Заголовок статьи=Processing: Ускорение при помощи векторов / Онлайн справочник - wikihandbk.com
|Ключевые слова=processing, Ускорение при помощи векторов в processing,  пример Ускорение при помощи векторов, пример Ускорение при помощи векторов в processing
|Описание статьи=
|Изображение статьи для Open Graph=
|Адрес страницы для schemaNewsArticle=<nowiki>http://wikihandbk.com/wiki/Processing:Примеры/Ускорение при помощи векторов</nowiki>
|Изображение статьи для schemaNewsArticle=<nowiki></nowiki>
|Высота изображения статьи для schemaNewsArticle=
|Ширина изображения статьи для schemaNewsArticle=
|Дата публикации для schemaNewsArticle=2018-08-06
|Автор=Мякишев Е.А.
|Издатель=myagkij
|Логотип издателя для schemaNewsArticle=<nowiki>http://wikihandbk.com/ruwiki/images/6/61/Tech_geek_logo_1x.jpg</nowiki>
|Ширина логотипа издателя для schemaNewsArticle=60
|Высота логотипа издателя для schemaNewsArticle=45
}}
{{Навигационная таблица/Справочник языка Processing}}
{{Навигационная таблица/Processing/Примеры}}

Текущая версия от 08:00, 27 августа 2023

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


Описание[1]

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

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

Пример

// объект Mover:
Mover mover;

void setup() {
  size(640,360);
  mover = new Mover(); 
}

void draw() {
  background(0);
  
  // обновляем позицию:
  mover.update();
  // показываем объект Mover:
  mover.display(); 
}




/**
 * Ускорение при помощи векторов 
 * Автор – Дэниэл Шиффман.  
 * 
 * Демонстрирует основы движения при помощи векторов.
 * Объект Mover в виде векторов хранит позицию, скорость и ускорение.
 * Управление движением осуществляется при помощи воздействия
   на ускорение (в данном случае – в сторону курсора мышки).
 */


class Mover {

  // объект Mover (шар) отслеживает позицию, скорость и ускорение:
  PVector location;
  PVector velocity;
  PVector acceleration;
  // максимальная скорость объекта Mover:
  float topspeed;

  Mover() {
    // шар начнет движение в центре экрана:
    location = new PVector(width/2,height/2);
    velocity = new PVector(0,0);
    topspeed = 5;
  }

  void update() {
    
    // рассчитываем вектор, 
    // указывающий от позиции шара в сторону курсора мышки:
    PVector mouse = new PVector(mouseX,mouseY);
    PVector acceleration = PVector.sub(mouse,location);
    // задаем длину вектора ускорения:
    acceleration.setMag(0.2);
    
    // скорость меняется при помощи добавления ускорения:
    velocity.add(acceleration);
    // ограничиваем скорость значением «topspeed»:
    velocity.limit(topspeed);
    // меняем позицию в зависимости от скорости:
    location.add(velocity);
  }

  void display() {
    stroke(255);
    strokeWeight(2);
    fill(127);
    ellipse(location.x,location.y,48,48);
  }

}

См.также

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