计算椭圆尺寸与距中心点距离的关系

2024-01-02

我想在每次崩溃时实现尺寸的缓慢消失。换句话说,当圆最大时,椭圆的尺寸也最大,反之,收缩时则相反。到目前为止,我试图通过从中心点的距离重新映射 cSize 来实现这种影响,但在此过程中的某个地方出了问题。目前,我的椭圆尺寸正在从小到大的缓慢过渡,但内部椭圆明显更大。我希望所有椭圆的大小相对于中心点距离均匀分布。

我已将代码简化为 4 个省略号,而不是省略号行数组,以便希望简化此示例。这是在 for (int x = -50; x 100).

我见过一两个例子,它们稍微满足了我的要求,但或多或​​少是静态的。此示例有点相似,因为椭圆尺寸相对于鼠标位置变得更小或更大

二维距离 https://i.stack.imgur.com/9UUdu.png

这是我试图创建的椭圆网格的附加图,此外,我试图按中心点缩放椭圆的“方形网格”。

多个椭圆+按中心缩放 https://i.stack.imgur.com/A5gq9.png

有什么指点吗?

float cSize;
float shrinkOrGrow;

void setup() {
    size(640, 640);
    noStroke();
    smooth();
    fill(255);
}

void draw() {
    background(#202020);
    translate(width/2, height/2);

    if (cSize > 10) {
      shrinkOrGrow = 0;
    } else if (cSize < 1 ) {
      shrinkOrGrow = 1;
}

    if (shrinkOrGrow == 1) {
      cSize += .1;
    } else if (shrinkOrGrow == 0) {
      cSize -= .1;
}
    for (int x = -50; x <= 50; x+=100) {
    for (int y = -50; y <= 50; y+=100) {
    float d = dist(x, y, 0, 0);    
    float fromCenter = map(cSize, 0, d, 1, 10);

  pushMatrix();
  translate(x, y);
  rotate(radians(d + frameCount));
  ellipse(x, y, fromCenter, fromCenter);
  popMatrix();
}
}
}

您传递给的值map()函数对我来说没有多大意义:

float fromCenter = map(cSize, 0, d, 1, 100);

The cSize变量反弹自1 to 10独立于其他任何事物。这d变量是每个椭圆到圆心的距离,但这对于每个人来说都是静态的因为你正在使用rotate()函数来“移动”圆圈,但圆圈实际上从未移动。这仅基于frameCount变量,您从不使用它来计算椭圆的大小。

换句话说,椭圆的位置及其大小在代码中完全无关。

您需要重构代码,以便大小基于距离。我看到执行此操作的两个主要选项:

选项1:现在您正在使用translate() and rotate()功能。您可以将其视为相机移动,而不是椭圆移动。因此,如果您想根据椭圆与某个点的距离来确定椭圆的大小,则必须获得变换点的距离,而不是原始点的距离。

幸运的是,Processing 为您提供了screenX() and screenY()用于确定点变换后的位置的函数。

以下是如何使用它的示例:

  for (int x = -50; x <= 50; x+=100) {
    for (int y = -50; y <= 50; y+=100) {
      pushMatrix();

      //transform the point
      //in other words, move the camera
      translate(x, y);
      rotate(radians(frameCount));

      //get the position of the transformed point on the screen
      float screenX = screenX(x, y);
      float screenY = screenY(x, y);

      //get the distance of that position from the center
      float distanceFromCenter = dist(screenX, screenY, width/2, height/2);

      //use that distance to create a diameter
      float diameter = 141 - distanceFromCenter;

      //draw the ellipse using that diameter
      ellipse(x, y, diameter, diameter);
      popMatrix();
    }
  }

选项2:停止使用translate() and rotate(),并直接使用省略号的位置。

您可以创建一个类来封装移动和绘制椭圆所需的所有内容。然后只需创建该类的实例并迭代它们。您需要一些基本的三角函数来确定位置,但您可以直接使用它们。

下面是一个这样做的小例子:

ArrayList<RotatingEllipse> ellipses = new ArrayList<RotatingEllipse>();

void setup() {
  size(500, 500);
  ellipses.add(new RotatingEllipse(width*.25, height*.25));
  ellipses.add(new RotatingEllipse(width*.75, height*.25));
  ellipses.add(new RotatingEllipse(width*.75, height*.75));
  ellipses.add(new RotatingEllipse(width*.25, height*.75));
}

void draw() {
  background(0);

  for (RotatingEllipse e : ellipses) {
    e.stepAndDraw();
  }
}

void mouseClicked() {
  ellipses.add(new RotatingEllipse(mouseX, mouseY));
}

void mouseDragged() {
  ellipses.add(new RotatingEllipse(mouseX, mouseY));
}

class RotatingEllipse {

  float rotateAroundX;
  float rotateAroundY;
  float distanceFromRotatingPoint;
  float angle;

  public RotatingEllipse(float startX, float startY) {

    rotateAroundX = (width/2 + startX)/2;
    rotateAroundY = (height/2 + startY)/2;

    distanceFromRotatingPoint = dist(startX, startY, rotateAroundX, rotateAroundY);

    angle = atan2(startY-height/2, startX-width/2);
  }

  public void stepAndDraw() {

    angle += PI/64;

    float x = rotateAroundX + cos(angle)*distanceFromRotatingPoint;
    float y = rotateAroundY + sin(angle)*distanceFromRotatingPoint;

    float distance = dist(x, y, width/2, height/2);
    float diameter = 50*(500-distance)/500;

    ellipse(x, y, diameter, diameter);
  }
}

在此示例中尝试单击或拖动。使用这种方法对我来说用户交互更有意义,但是您选择哪个选项实际上取决于最适合您头脑的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算椭圆尺寸与距中心点距离的关系 的相关文章

随机推荐

  • Flex 到 HTML5 - 表示层(canvas、div、???)

    我的问题是关于从 Flex3 迁移到 HTML5 的问题 我实际上想迁移自己而不是应用程序 问题是 什么方向是最好的 和Flex知识最相似的 也许我会重新实现我的 Flex 库中已有的一些自定义组件 我认为我必须在 HTML5 中自己实现一
  • Java中的多态复制

    我突然遇到了一个用Java进行深度多态复制的问题 实施Clonable解决了我的问题 但它通常被称为 坏 技术 因此 我尝试寻找 不可克隆 的解决方案 public class Parent int x public Parent publ
  • C 中空结构的大小是多少?

    据我说 它是零 但似乎有点混乱here https stackoverflow com questions 1626017 why sizeofspinlockt is greater than zero on uni processor
  • 通过套接字使用 boost 发送和接收压缩文件

    在我的项目中 通过套接字读取和写入消息是使用 boost 的 Zlib 过滤器进行压缩的 我想知道如何执行相同的操作files 有什么更好的方法可以提高速度 不使用硬盘将数据保存在缓冲区中 我在使用 boost 传输文件时遇到问题 因此欢迎
  • 带有关闭按钮的 Angular UI Bootstrap 弹出框

    我正在使用 Angular UI Bootstrap 创建弹出窗口 但我找不到在弹出窗口内添加关闭按钮的选项 我自定义了弹出框模板以包含关闭按钮 但我仍然无法找到关闭弹出窗口的函数 事件 环境isOpenfalse 第一次起作用 因为它只是
  • 如何在 PHP-CS-Fixer 中配置 HeaderCommentFixer

    我想用HeaderCommentFixer https github com FriendsOfPHP PHP CS Fixer blob 1 12 Symfony CS Fixer Contrib HeaderCommentFixer p
  • 将 Github 页面重定向到自定义域

    我创建了一个 Github Pages 站点 并将其放在 github 帐户的存储库 abc 上 用户名为 xyz 所以 我的网站现在位于 xyz github io abc 我使用自定义域创建了一个 cname 文件 并使用 Github
  • ClojureScript:如何通过原型向 JS 对象添加方法?

    我正在尝试向现有的 JavaScript 系统添加一些功能 然后再次从 JavaScript 使用 而不是在 ClojureScript 命名空间内 也许这是不可能的 这是我想做的事情的简化 JavaScript String protot
  • 无法使用 Express.js 更改 Favicon

    这是一个非常基本的问题 但我正在尝试使用以下命令更改我的 node js Express 应用程序的图标 app use express favicon dirname public images favicon ico 我仍然得到默认的图
  • 为什么不让每个节点都成为种子节点

    我是卡桑德拉新手 我了解种子节点的用途 但是种子节点有任何相关成本吗 如果是这样 它们是什么 另外 我想知道为什么不让每个节点都成为种子节点 作为种子 基本上没有本地运行时成本 除了您可能会比非种子节点收到更多的八卦流量之外 然而 随着种子
  • 如何通过进程生成器在 4-5 秒后停止执行命令?

    参考代码 ProcessBuilder ps4 Process pr4 null String batchFile3 new File path src example sh ps4 new ProcessBuilder batchFile
  • PyQt:使用不同的 ItemIgnoresTransformations 标志移动多个项目

    有时选定的项目不会一起移动 这种情况发生在具有两种类型项目的应用程序中 常规物品 处理 与ItemIgnoresTransformations标志 缩放时它们必须保持相同的大小 当它们一起被选择并用鼠标移动时 它们预计会被平移相同的量 它们
  • 有没有办法使用 CSS 使子 DIV 的宽度比父 DIV 宽?

    有没有办法让父容器 DIV 中的子 DIV 比其父容器宽 子 DIV 需要与浏览器视口的宽度相同 See example below 子DIVmust保留为父 div 的子级 我知道我可以在子 div 上设置任意负边距以使其更宽 但我无法弄
  • 必须在我的 Rails 3 应用程序的控制器操作中显式渲染 :layout => 'application'

    我必须在控制器操作中显式渲染 layout gt application 才能让我的新 Rails 3 应用程序实际使用 application html erb 布局文件 有什么明显的事情可以看出我做错了吗 如果我不调用 layout 选
  • 使用 Keras,如何输入 X_train 图像(超过一千张图像)?

    我的应用程序是使用机器学习 卷积神经网络 的事故避免汽车系统 我的图像是 200x100 JPG 图像 输出是 4 个元素的数组 汽车将向左 向右 停止或前进 所以输出将让一个元素成为1 根据应采取的正确行动 和其他 3 个要素将是0 我现
  • JavaScript 数组到 CSV

    我关注了这个帖子如何将 JavaScript 数组信息导出到 csv 在客户端 https stackoverflow com questions 14964035 how to export javascript array info t
  • 模型内的简单验证规则

    我在这里提到Laravel 4 2 验证规则 当前密码必须与数据库值匹配 https stackoverflow com questions 24830119 laravel 4 2 validation rules current pas
  • 根据父级 div 大小按比例调整图像大小

    我正在使用全浏览器宽度高度 jquery blockUI 来显示从图库中选择的图像 下图是 blockUI 中的视图方案 基本上侧块 UI 中的视图的宽度和高度设置为 100 里面还有两个 div 右侧的宽度设置为视图的 80 并且包含图像
  • 以编程方式更改“默认使用此操作”

    我有普通的 电话 拨号器和新的 拨号器 应用程序 现在 如果我选中 默认情况下使用此操作 并单击 拨号器 应用程序 那么每次按下电话按钮时 拨号器 应用程序都会自动启动 但我怎样才能在代码中改变它呢 此首选项存储在哪里 这是如何映射的 这是
  • 计算椭圆尺寸与距中心点距离的关系

    我想在每次崩溃时实现尺寸的缓慢消失 换句话说 当圆最大时 椭圆的尺寸也最大 反之 收缩时则相反 到目前为止 我试图通过从中心点的距离重新映射 cSize 来实现这种影响 但在此过程中的某个地方出了问题 目前 我的椭圆尺寸正在从小到大的缓慢过