微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用map解释坐标的计算

如何解决用map解释坐标的计算

有人可以解释这个值/位置的含义:300-400/2+10。我知道它使红色圆圈不会超出正方形,但我不太了解计算方法。是否有一个页面可以读取它的工作原理,因为我个人会这样做

float  redCircle = map(mouseX,width,116,485);
circle(redCircle,map(mouseY,height,114,485),20);

具有一个数字位置,而不是像代码中那样的计算。我试图了解它,但我不明白。如果有人可以解释操作过程,我将不胜感激。

    void setup() {
        size(600,600);
      surface.setTitle("Mapping");
      surface.setLocation(CENTER,CENTER);
    }
    
    void draw() {
      background(0);
      stroke(255);
    
      fill(255,255,255);//weißer Kreis
      circle(mouseX,mouseY,20);
      mouseMoved();
      text("Maus X/Y:"+mouseX+"/"+mouseY,250,300); //Text für weiße Position
    
     
      fill(255,0); //Roter Kreis
      float posFromMouseX = map(mouseX,300-400/2+10,300-400/2+400-10);
      float posFromMouseY = map(mouseY,300-400/2+400-10);
      ellipse(posFromMouseX,posFromMouseY,20,20);
      text("map to: "+posFromMouseX+" / "+posFromMouseY,320); //Text für rote Position
      
      // Transparentes Rechteck in der Mitte
      noFill();
      rect(300-400/2,300-400/2,400,400); 
    }

解决方法

map()会相应地将数字的比例调整到一个范围。

例如,如果您具有以下值:

MouseX: 200
width: 1000

您可以轻松地计算出,如果屏幕的宽度为2000,则您的鼠标X位置需要成比例的为400。

但这是一个简单的例子。在您粘贴到此处的代码中,发生了相同的事情,但是比较的坐标是:

  1. 整个窗口
  2. 白色矩形

map() function需要5个参数:

map(value,start1,stop1,start2,stop2)
  1. value:float:要转换的传入值
  2. start1:float:值当前范围的下限
  3. stop1:浮点数:该值当前范围的上限
  4. start2:float:值目标范围的下限
  5. stop2:浮动值:目标值范围的上限

所以...您可以完全不用计算而写以下行:

float posFromMouseX = map(mouseX,width,110,300-400/2+400-10);
// is the same thing than:
float posFromMouseX = map(mouseX,490);

用这种方式写的可能原因是:

  1. 作者可能不想做简单的数学运算
  2. 作者可能想知道这些数字从何而来(了解如何计算这些数字将在这方面有所帮助)
  3. 作者可能想更改变量的硬编码数字,并在以后使其白色矩形的尺寸动态变化

希望这对您有意义。玩得开心!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。