美文网首页
指向运动的方向

指向运动的方向

作者: 大龙10 | 来源:发表于2022-04-28 06:18 被阅读0次

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

3.4 指向运动的方向

1、atan 函数与atan2()函数

图3-7

上面的两个向量看起来很相似,但是它们的方向是完全相反的。如果我们用反正切函数分别求解这两个向量的角度:


  • 对上面两个向量,我们用反正切函数计算得到的角度是相等的。
  • 这个计算结果肯定是不对的,因为两个向量的方向完全相反!
  • 这是在计算机图形学中很常见的问题。
  • 为了解决这个问题,Processing提供了一个现成的函数。这个函数就是atan2()。
  • 为了进一步简化这个问题,PVector类提供了heading2D()函数(这个函数会在内部调用atan2()函数),可以用来直接获取任何向量的弧度。

2、示例代码3-3

示例代码3-3 指向运动的方向

Mover mover;

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

void draw() {
 // background(255);
  
  mover.update();
  mover.checkEdges();
  mover.display(); 
}

Mover.pde

class Mover {

  PVector position;
  PVector velocity;
  PVector acceleration;
  float topspeed;

  float xoff, yoff;

  float r = 16;

  Mover() {
    position = new PVector(width/2, height/2);
    velocity = new PVector(0, 0);
    topspeed = 4;
    xoff = 1000;
    yoff = 0;
  }

  void update() {

    PVector mouse = new PVector(mouseX, mouseY);
    PVector dir = PVector.sub(mouse, position);
    dir.normalize();
    dir.mult(0.5);
    acceleration = dir;

    velocity.add(acceleration);
    velocity.limit(topspeed);
    position.add(velocity);
  }

  void display() {
    float theta = velocity.heading();  //获取弧度值

    stroke(0);
    strokeWeight(2);
    fill(0,127,0);
    pushMatrix();
    rectMode(CENTER);
    translate(position.x, position.y); 
    rotate(theta);               //旋转角度
    rect(0, 0, 30, 10);
    
    popMatrix();
  }

  void checkEdges() {

    if (position.x > width) {
      position.x = 0;
    } 
    else if (position.x < 0) {
      position.x = width;
    }

    if (position.y > height) {
      position.y = 0;
    } 
    else if (position.y < 0) {
      position.y = height;
    }
  }
}

3、运行结果

相关文章

  • 指向运动的方向

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

  • 02、坐标系

    一、世界坐标系 拇指指向方向:X轴方向 食指指向方向:Y轴方向 中指指向方向:Z轴方向 二...

  • 辨别方向的方法

    1、看地图辨别方向是最简单的办法。地图上有指向标指示方向,指向标箭头的指向就是北方。 2、有的地图没有指向标,通常...

  • OpenGL坐标系解析

    左手坐标系与右手坐标系 伸出左手,大拇指指向x轴正方向,食指指向y轴的正方向,其余三个手指指向z轴的正方向,满足这...

  • 深度学习扩展_梯度下降

    :当发生微小变化的时候,的变化有多大。可用式子表示 是梯度,指向最陡上升方向。 是方向导数,并不指向最陡上升方向。...

  • 味蕾永远指向家乡的方向

    知道陈晓卿,是在《圆桌派》一期节目中,他当嘉宾,说到“汕头是中国美食的一座孤岛”,并且预言下一个被毁掉的美食将是“...

  • openGL中的坐标系

    openGL中使用的是右手坐标系 右手坐标系:伸开右手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向...

  • 3D转化【复合属性】

    3D转化【复合属性】 左手法则表示3D坐标系: 1. 大拇指指向的方向就是 X 轴的正方向 2. 中指指向的方向就...

  • 时间的指向决定你的方向

    一直在努力,却发现自己假装自己在努力。把太多时间花在不应该过度忧心的地方。现在明白: “一个真正强大的人,...

  • 他是沸腾的火星

    我们只是颤抖的磁铁碎片, 指向被召唤的方向

网友评论

      本文标题:指向运动的方向

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