0

在这个程序中,我试图将点画在斜边上。如果这条线是对角线,它似乎工作正常。但是线条越垂直或水平,点就越稀疏。如果这条线是完全垂直或水平的,我就没有点。同样,红线越长,点越远离它。

这里的这个问题似乎与我要问的类似,但我不明白答案。

如何检查一个点(int - 坐标)是否在三角形的斜边内

我需要在红线上的每个像素上画一个点,但不要离它太远(最多 1 或 2 个像素)

此代码用于处理。

int sx,sy,ex,ey;
void setup(){
  sx=150;
  sy=150;
  ex=550;
  ey=550;
  size(600,600);
}

void draw(){
  background(255);
  stroke(#ff0000);
  fill(0);
  line(sx,sy,ex,ey);
  stroke(0);
  for(int y=0;y<height;y++){
    for(int x=0;x<width;x++){
      if(((x<=sx && x>=ex) || (x>=sx && x<=ex)) && ((y<=sy && y>=ey) || (y>=sy && y<=ey))){ 
        double xdiff=ex-sx;
        double ydiff=ey-sy;
        double xpos=(x-sx)/xdiff;
        double ypos=(y-sy)/ydiff;
        double diff=xpos-ypos;
        if(diff>-0.01 && diff < 0.01) ellipse(x,y,3,3);
      }
    }
  }
}

void mousePressed() {
    if(mouseButton == LEFT){
      ex=mouseX;
      ey=mouseY;
    }else{
      sx=mouseX;
      sy=mouseY;
    }   
}
4

1 回答 1

2

您可以只按照线本身而不是测试每个像素吗?

int sx,sy,ex,ey;

void setup(){
  size(600,600); //size() should always be the first line of setup()
 sx=150;
 sy=150;
 ex=550;
 ey=550;
 background(255);
}

void draw(){}

void mousePressed(){
  background(255);
  fill(0);
  stroke(0);
  if(mouseButton == LEFT){
    ex=mouseX;
    ey=mouseY;
  }else{
    sx=mouseX;
    sy=mouseY;
  } 
  line(sx,sy,ex,ey);
  float dx = (ex-sx);
  float dy = (ey-sy);
  float numDots = sqrt(pow(ey-sy,2) + pow(ex-sx,2));

  for(int i = 0; i < numDots; i++){
    ellipse(sx + i*dx/numDots, sy + i*dy/numDots,3,3);
  }
}

或者,使用 Processing 的PVector类:

PVector start,end;

void setup(){
  size(600,600); //size() should always be the first line of setup()
  start = new PVector(150,150);
  end = new PVector(550,500);
  background(255);
}

void draw(){}

void mousePressed(){
  background(255);
  fill(0);
  stroke(0);
  if(mouseButton == LEFT)
    end.set(mouseX,mouseY);
  else
    start.set(mouseX,mouseY);
  line(start.x,start.y,end.x,end.y);
  PVector slope = new PVector(end.x-start.x,end.y-start.y);
  float numDots = end.dist(start);

  for(int i = 0; i < numDots; i++){
    ellipse(start.x + i*slope.x/numDots, start.y + i*slope.y/numDots,3,3);
  }
}
于 2013-10-17T16:30:13.800 回答