美文网首页
带有角速度的振荡

带有角速度的振荡

作者: 大龙10 | 来源:发表于2022-05-01 15:24 被阅读0次

    书名:代码本色:用编程模拟自然系统
    作者:Daniel Shiffman
    译者:周晗彬
    ISBN:978-7-115-36947-5
    目录

    3.7 带有角速度的振荡

    1、简谐运动2

      一个以弧度为单位的圆(一个圆周为2π,即:360度=2π),

    • 在单位时间内所走的弧度即为角速度.
    • 公式为:ω=Ч/t
      (Ч为所走过弧度,t为时间)ω的单位为:弧度每秒

    2、Oscillator(振荡者)类

    • 创建一个Oscillator(振荡者)类,让振荡同时发生在x轴(如上所示)和y轴。
    • 我们需要在类中加入两个角度变量、两个角速度变量和两个振幅(分别针对x轴和y轴)

    3、示例代码3-7

    示例代码3-7 Oscillator对象

    // An array of objects
    Oscillator[] oscillators = new Oscillator[10];
    
    void setup()  {   
      size(640,360);  
      smooth();  
      // Initialize all objects
      for (int i = 0; i < oscillators.length; i++) {
        oscillators[i] = new Oscillator();
      }
      background(255);  
    }   
    
    void draw() {     
      background(255);  
      // Run all objects
      for (int i = 0; i < oscillators.length; i++) {
        oscillators[i].oscillate();
        oscillators[i].display();
      }
    }   
    

    Oscillator.pde

    class Oscillator {   
    
      PVector angle;
      PVector velocity;
      PVector amplitude;
      color c;
    
      Oscillator() {   
        angle = new PVector();
        velocity = new PVector(random(-0.05, 0.05), random(-0.05, 0.05));
        amplitude = new PVector(random(20,width/2), random(20,height/2));
        c = color(random(255),random(255),random(255));
      }   
    
      void oscillate() {
        angle.add(velocity);
      }   
    
      void display() {   
    
        float x = sin(angle.x)*amplitude.x;
        float y = sin(angle.y)*amplitude.y;
    
        pushMatrix();
        translate(width/2, height/2);
        stroke(0);
        strokeWeight(2);
        fill(c);
        line(0, 0, x, y);  
        ellipse(x, y, 32, 32);  
        popMatrix();
      }
    }   
    

    4、运行效果

    相关文章

      网友评论

          本文标题:带有角速度的振荡

          本文链接:https://www.haomeiwen.com/subject/nshfyrtx.html