在处理过程中循环读取文件

Daymnn:

我正在制作动画处理。然后,我对循环有疑问。通常,我的代码更长。但是,我编写了一个简单的代码,对初学者也很有用。因此,我的文本文件名为“ coordinates”,如下所示:

378 206
366 190
341 168
307 148

我的示例代码:

String[] coordinates;    // Creating an array for my text file.
String[] xy;             // Creating an array for split the numbers, then I can use x coordinate and y coordinate

int deltaX, deltaY, p;
int initialX, initialY;  // Initial point of first coodinate
int finalX, finalY;      // Final point of first coodinate
int counter = 0;

void setup() 
{

  size(500, 500);

  strokeWeight(5);
  frameRate(2);

  coordinates = loadStrings("coordinates.txt");
  beginShape();         // It combines the all of vertexes

  String[] xy1 = coordinates[0].split(" "); // Split the text file for finding the 378 and 206
  int x1 = Integer.parseInt(xy1[0]);        // Number of 378
  int y1 = Integer.parseInt(xy1[1]);        // Number of 206
  println(x1);
  println(y1);

  String[] xy2 = coordinates[1].split(" "); // Split the text file for finding the 366 and 190
  int x2 = Integer.parseInt(xy2[0]);        // Number of 366
  int y2 = Integer.parseInt(xy2[1]);        // Number of 190
  println(x2);
  println(y2);

  initialX = x1;
  initialY = y1;
  finalX = x2;
  finalY = y2;

  deltaX = abs(finalX - initialX);
  deltaY = abs(finalY - initialY);
  p = 2 * deltaY - deltaX;


  endShape(CLOSE);
}

void draw() 
{

  point(initialX, initialY);
  println(initialX, initialY, p);

  if (finalX > initialX )
    initialX++;
  else
    initialX--;

  if (p < 0)
  {
    p = p + 2 * deltaY;
  } else
  {
    if (initialY > finalY)
      initialY--;
    else
      initialY++;
    p = p + 2 * deltaY - 2 * deltaX;
  }

  counter++;
  if (counter > deltaX)
    noLoop();
}

因此,就像您看到的那样,我使用“ Bresenhams算法”绘制线,但是我只能在第一个点的坐标和第二个点的坐标(378 206366 190之间进行绘制。但是,线应该从366 190341 168。然后,线341 168307 148通常我的文本文件很长,我想循环绘制这样的线条。我该怎么做?

亚历克斯·鲁登科(Alex Rudenko):

您很可能需要修复setup方法以从行中获取点数据,然后修改draw方法以在循环中使用这些点:

int[][] points;
int curr = 0;

void setup() {

    size(500, 500);

    strokeWeight(4);
    frameRate(5);

    coordinates = loadStrings("coordinates.txt");
    beginShape();         // It combines the all of vertexes

    points = new int[coordinates.length][2];
    int row = 0;
    for (String line : coordinates) {
        String[] pair = line.split(" ");
        points[row] = new int[] { Integer.parseInt(pair[0]), Integer.parseInt(pair[1])};
        println(points[row][0]); // print x
        println(points[row][1]); // print y
        row++;
    }

    fixLineCoords();
    endShape(CLOSE);
}

void fixLineCoords() {
    int indexStart = curr % points.length;
    int indexEnd = (curr + 1) % points.length;
    initialX = points[indexStart][0];
    initialY = points[indexStart][1];
    finalX = points[indexEnd][0];
    finalY = points[indexEnd][1];

    deltaX = abs(finalX - initialX);
    deltaY = abs(finalY - initialY);
    p = 2 * deltaY - deltaX;

    println("Line between points " + curr + " and " + (curr+1));
    counter = 0; // reset counter;
}

void draw() {
    point(initialX, initialY);
    println(initialX, initialY, p);

    if (finalX > initialX )
        initialX++;
    else
        initialX--;

    if (p < 0) {
        p = p + 2 * deltaY;
    } else {
        if (initialY > finalY)
            initialY--;
        else
            initialY++;
        p = p + 2 * deltaY - 2 * deltaX;
    }

    counter++;
    if (counter > deltaX) {
        if (curr == points.length) {
            noLoop(); // all points processed
        } else {
            curr++;
            fixLineCoords();
        }
    }
}

结果:

封闭折线

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java处理过程中对文件排序

当在信号处理过程中不使用volatile关键字时,演示编译器的优化效果?

我可以在处理过程中重定向工作线程以执行其他工作吗?

使用while循环读取存储过程中的行值

在处理过程中的最后一条语句之后,Oracle PL SQL过程需要很长时间才能完成

火花流处理过程中使用的全局类变量:是广播变量吗?

在多线程处理过程中,对象析构函数始终被调用,但对象并未超出范围

在删除语句批处理过程中是否存在运算符?

如果在处理过程中出现问题,请停止处理kafka消息

在处理过程中在设备之间切换3改变外观

为什么时钟中断在处理过程中永远不起作用?

为什么在多处理过程中得到如此糟糕的结果?

Ajax处理过程中,Ajax显示正在加载图像

Mule 3.5.0-如何在处理过程中引发异常时将文件移动到“失败”目录并发送电子邮件

批处理过程中重复输入

jQuery:事件对象是否在事件处理过程中隐式传递?

在多处理过程中抑制输出

Delphi:在外部控制的处理过程中以被动UI的形式存在

令牌仅在预处理之后还是在预处理过程中进行计数?

如果应用程序在处理过程中崩溃,MQ Light如何确保不会从队列中删除消息?

C#从管理过程中编辑文件系统目录特权

在函数处理过程中加载消息

将变量添加到批处理过程中

在处理过程中缩放应用程序并保持宽高比相同

迁移到 CXF 3.2.7 -> 如何解决 SOAP RQ 处理过程中与密码相关的安全错误?

使用 python 从 azure 函数读取元数据(blob 和容器名称),但在处理过程中显示 NoneType

对象在处理过程中相遇时的短语

我如何在 python 中的字符串处理过程中保留变音符号

如何在错误处理过程中捕获无效 SQL