Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将此更改为使用直线?加工中_Java_Processing - Fatal编程技术网

Java 将此更改为使用直线?加工中

Java 将此更改为使用直线?加工中,java,processing,Java,Processing,我有一个程序,基本上是一个三角形的螺旋。有人知道我如何改变这个程序,让一整条线变成螺旋线,让它变成直线段吗?以下是我到目前为止的代码 void setup(){ int len=100; int startx =250; int starty= 250; float angle = PI; size (500,500); spiral_triangle(len, startx,starty,angle); } void spiral_triangle(int len,

我有一个程序,基本上是一个三角形的螺旋。有人知道我如何改变这个程序,让一整条线变成螺旋线,让它变成直线段吗?以下是我到目前为止的代码

void setup(){
  int len=100;
  int startx =250;
  int starty= 250;
  float angle = PI;
  size (500,500);
  spiral_triangle(len, startx,starty,angle);

}

void spiral_triangle(int len, int startx, int starty, float angle){

   if (len>1) 
        {line( startx, starty ,int(startx+len*cos(angle)),int(starty + len*sin(angle))  );
        int new_startx = int(startx+len*cos(angle));
        int new_starty = int(starty+len*sin(angle));
        int new_len = len -10;
        float new_angle = angle + PI/1.5;
        spiral_triangle(new_len, new_startx,new_starty,new_angle);
        } 
}

例如。。。我需要的不是每面一行,而是每面一行。。。单个线段(有点像虚线或折线)

如果我理解正确,您需要的是圆形螺旋而不是三角形螺旋。下面的代码应该可以实现这一点

void spiral_triangle(float len, int startx, int starty, float angle){
   if (len>1) {
      float new_len = len - 0.1;
      float new_angle = angle + PI/100;
      int oldx = int(startx+len*cos(angle));
      int oldy = int(starty+len*sin(angle));
      int newx = int(startx+new_len*cos(new_angle));
      int newy = int(starty+new_len*sin(new_angle));
      line( oldx,oldy,newx,newy);   
      spiral_triangle(new_len, startx,starty,new_angle);
   } 
}

如果希望绘制虚线而不是实线,则必须根据以下线程编写自己的代码:

奇怪的是,库中没有虚线函数。使用该线程中的函数之一,可以执行以下操作:

void setup() {
  int len=100;
  int startx =250;
  int starty= 250;
  float angle = PI;
  size (500, 500);
  spiral_triangle(len, startx, starty, angle);
}

void spiral_triangle(int len, int startx, int starty, float angle) {
  if (len>1) {
    float[] spacing = {2,2};
    dashline( startx, starty, int(startx+len*cos(angle)), int(starty + len*sin(angle)), spacing);
    int new_startx = int(startx+len*cos(angle));
    int new_starty = int(starty+len*sin(angle));
    int new_len = len -10;
    float new_angle = angle + PI/1.5;
    spiral_triangle(new_len, new_startx, new_starty, new_angle);
  }
}

/* 
 * Draw a dashed line with given set of dashes and gap lengths. 
 * x0 starting x-coordinate of line. 
 * y0 starting y-coordinate of line. 
 * x1 ending x-coordinate of line. 
 * y1 ending y-coordinate of line. 
 * spacing array giving lengths of dashes and gaps in pixels; 
 *  an array with values {5, 3, 9, 4} will draw a line with a 
 *  5-pixel dash, 3-pixel gap, 9-pixel dash, and 4-pixel gap. 
 *  if the array has an odd number of entries, the values are 
 *  recycled, so an array of {5, 3, 2} will draw a line with a 
 *  5-pixel dash, 3-pixel gap, 2-pixel dash, 5-pixel gap, 
 *  3-pixel dash, and 2-pixel gap, then repeat. 
 */ 
void dashline(float x0, float y0, float x1, float y1, float[ ] spacing) 
{ 
  float distance = dist(x0, y0, x1, y1); 
  float [ ] xSpacing = new float[spacing.length]; 
  float [ ] ySpacing = new float[spacing.length]; 
  float drawn = 0.0;  // amount of distance drawn 

  if (distance > 0) 
  { 
    int i; 
    boolean drawLine = true; // alternate between dashes and gaps 

    /* 
      Figure out x and y distances for each of the spacing values 
      I decided to trade memory for time; I'd rather allocate 
      a few dozen bytes than have to do a calculation every time 
      I draw. 
    */ 
    for (i = 0; i < spacing.length; i++) 
    { 
      xSpacing[i] = lerp(0, (x1 - x0), spacing[i] / distance); 
      ySpacing[i] = lerp(0, (y1 - y0), spacing[i] / distance); 
    } 

    i = 0; 
    while (drawn < distance) 
    { 
      if (drawLine) 
      { 
        line(x0, y0, x0 + xSpacing[i], y0 + ySpacing[i]); 
      } 
      x0 += xSpacing[i]; 
      y0 += ySpacing[i]; 
      /* Add distance "drawn" by this line or gap */ 
      drawn = drawn + mag(xSpacing[i], ySpacing[i]); 
      i = (i + 1) % spacing.length;  // cycle through array 
      drawLine = !drawLine;  // switch between dash and gap 
    } 
  } 
} 
void setup(){
int len=100;
int startx=250;
int starty=250;
浮动角度=π;
大小(500500);
螺旋三角(len、startx、starty、angle);
}
空心螺旋_三角形(内角、内角、外角、外角){
如果(len>1){
float[]间距={2,2};
仪表板(startx,starty,int(startx+len*cos(角度)),int(starty+len*sin(角度)),间距);
int new_startx=int(startx+len*cos(角度));
int new_starty=int(starty+len*sin(角度));
int new_len=len-10;
浮动新角度=角度+PI/1.5;
螺旋三角(新透镜、新恒星、新恒星、新角度);
}
}
/* 
*用给定的一组虚线和间隙长度绘制一条虚线。
*x0直线的起始x坐标。
*y0直线的起始y坐标。
*x1结束线的x坐标。
*y1线的结束y坐标。
*间距数组,以像素为单位给出虚线和间距的长度;
*值为{5,3,9,4}的数组将用
*5像素划线、3像素间距、9像素划线和4像素间距。
*如果数组的条目数为奇数,则值为
*循环,因此{5,3,2}的数组将用
*5像素划线,3像素间距,2像素划线,5像素间距,
*3像素划线和2像素间距,然后重复。
*/ 
虚线(浮动x0、浮动y0、浮动x1、浮动y1、浮动[]间距)
{ 
浮动距离=距离(x0,y0,x1,y1);
float[]xSpacing=新的float[spacing.length];
float[]yspace=新的float[spacing.length];
绘制的浮动=0.0;//绘制的距离量
如果(距离>0)
{ 
int i;
布尔drawLine=true;//虚线和间隙之间交替
/* 
计算每个间距值的x和y距离
我决定用记忆换取时间,我宁愿分配时间
每次都要计算几十个字节
我画画。
*/ 
对于(i=0;i

我希望这能有所帮助。

感谢您的快速回复。。。但我想要的仍然是一个三角形螺旋,虽然有一条直线不断弯曲形成三角形,但它将是形成三角形螺旋的单独线段。。。很抱歉,我的帖子中出现了任何混乱。如果这不是你问题的答案,你不应该将其标记为答案,否则可能会让其他读者感到困惑。我很困惑,你发布的代码确实会生成单独的线段。对spiral_triangle的调用是递归的,并在每次调用期间绘制一条单独的线。它不是一条被弯曲的直线,而是绘制单独的线段。你能澄清一下你的要求吗?我编辑了这个问题:)我还是很困惑。您的代码已经从直线段生成了缓和曲线。