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

Processing:Примеры/Объект, тянущийся к курсору 2

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


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

Контакты:

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


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


Описание[1]

Этот скетч-пример основан на коде Кита Питерса. Здесь «щупальце» пытается дотянуться до позиции курсора. Углы рассчитываются при помощи функции atan2().

Пример

  1. int numSegments = 10;
  2. float[] x = new float[numSegments];
  3. float[] y = new float[numSegments];
  4. float[] angle = new float[numSegments];
  5. float segLength = 26;
  6. float targetX, targetY;
  7.  
  8. void setup() {
  9.   size(640, 360);
  10.   strokeWeight(20.0);
  11.   stroke(255, 100);
  12.   x[x.length-1] = width/2;     // задаем координату X для основы
  13.   y[x.length-1] = height;  // задаем координату Y для основы
  14. }
  15.  
  16. void draw() {
  17.   background(0);
  18.  
  19.   reachSegment(0, mouseX, mouseY);
  20.   for(int i=1; i<numSegments; i++) {
  21.     reachSegment(i, targetX, targetY);
  22.   }
  23.   for(int i=x.length-1; i>=1; i--) {
  24.     positionSegment(i, i-1);  
  25.   }
  26.   for(int i=0; i<x.length; i++) {
  27.     segment(x[i], y[i], angle[i], (i+1)*2);
  28.   }
  29. }
  30.  
  31. void positionSegment(int a, int b) {
  32.   x[b] = x[a] + cos(angle[a]) * segLength;
  33.   y[b] = y[a] + sin(angle[a]) * segLength;
  34. }
  35.  
  36. void reachSegment(int i, float xin, float yin) {
  37.   float dx = xin - x[i];
  38.   float dy = yin - y[i];
  39.   angle[i] = atan2(dy, dx);  
  40.   targetX = xin - cos(angle[i]) * segLength;
  41.   targetY = yin - sin(angle[i]) * segLength;
  42. }
  43.  
  44. void segment(float x, float y, float a, float sw) {
  45.   strokeWeight(sw);
  46.   pushMatrix();
  47.   translate(x, y);
  48.   rotate(a);
  49.   line(0, 0, segLength, 0);
  50.   popMatrix();
  51. }

См.также

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

  1. processing.org - Reach 2 based on code from Keith Peters.