Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 节点';在数组中使用循环时,s不是交集?_Java_Processing - Fatal编程技术网

Java 节点';在数组中使用循环时,s不是交集?

Java 节点';在数组中使用循环时,s不是交集?,java,processing,Java,Processing,我的问题是,无论我在何处单击,都会出现一个节点,第二次单击时,会出现另一个具有连接边的节点……因此,我希望当我在任何位置单击时,节点都应在最近的栅格交点处生成。我试着使用循环。 我想在没有“课堂”的情况下做到这一点 int n_分区=10; 整数长度=101; PVector[]位置=新PVector[长度]; int-BallNum; 无效设置(){ 尺寸(600360); 背景(255); } 作废提款(){ 填充(255); 网格(); 填充(0); } void mousePressed

我的问题是,无论我在何处单击,都会出现一个节点,第二次单击时,会出现另一个具有连接边的节点……因此,我希望当我在任何位置单击时,节点都应在最近的栅格交点处生成。我试着使用循环。 我想在没有“课堂”的情况下做到这一点

int n_分区=10;
整数长度=101;
PVector[]位置=新PVector[长度];
int-BallNum;
无效设置(){
尺寸(600360);
背景(255);
}
作废提款(){
填充(255);
网格();
填充(0);
}
void mousePressed(){
冲程(0);
BallNum++;
位置[BallNum]=新的PVector(mouseX,mouseY);
圆(位置[BallNum].x,位置[BallNum].y,10);
如果(BallNum>1){
行(位置[BallNum].x,位置[BallNum].y,位置[BallNum-
1] .x,位置[BallNum-1].y);
行(位置[1].x,位置[1].y,位置[BallNum].x,位置[BallNum].y);
}
对于(int i=0;i<位置[BallNum]。长度;++i){
位置[BallNum]=位置[BallNum]。获取(i);
位置[BallNum]=位置[BallNum]。获取((i+1)%position[BallNum]。长度);
行(位置[BallNum].x,位置[BallNum].y,
位置[BallNum].x,位置[BallNum].y);
}
}

我希望节点应该到最近的交点。

您必须计算鼠标到网格上某个点的最近位置。为此,您必须知道单元格的宽度(
tile\u width
)和高度(
tile\u height
)。 单元格的索引可以通过将鼠标位置除以平铺大小并将结果除以整数值(例如
圆形(mouseX/(float)平铺宽度)
)来计算。
不要在
鼠标按下的回调中绘制任何内容。你要做的唯一一件事就是在列表中添加一品脱:

void mousePressed(){
int tile\u width=width/n\u partition;//根据您的需要进行调整
int tile_height=高度/n_分区;
int x=圆形(鼠标/(浮动)瓷砖宽度)*瓷砖宽度;
int y=圆形(鼠标/(浮动)瓷砖高度)*瓷砖高度;
位置[BallNum]=新的PVector(x,y);
BallNum++;
}
所有绘图都必须在
draw()
中完成。在单独的循环中绘制线和点:

void draw(){
背景(255);
网格();
//把线画成一个圈
冲程重量(3);
笔划(0,0,255);
对于(int i=0;i
请注意,场景在每一帧中都会连续重画。在绘制场景之前,必须通过“清除”整个窗口

见结果:


您必须计算鼠标到网格上某个点的最近位置。为此,您必须知道单元格的宽度(
tile\u width
)和高度(
tile\u height
)。 单元格的索引可以通过将鼠标位置除以平铺大小并将结果除以整数值(例如
圆形(mouseX/(float)平铺宽度)
)来计算。
不要在
鼠标按下的回调中绘制任何内容。你要做的唯一一件事就是在列表中添加一品脱:

void mousePressed(){
int tile\u width=width/n\u partition;//根据您的需要进行调整
int tile_height=高度/n_分区;
int x=圆形(鼠标/(浮动)瓷砖宽度)*瓷砖宽度;
int y=圆形(鼠标/(浮动)瓷砖高度)*瓷砖高度;
位置[BallNum]=新的PVector(x,y);
BallNum++;
}
所有绘图都必须在
draw()
中完成。在单独的循环中绘制线和点:

void draw(){
背景(255);
网格();
//把线画成一个圈
冲程重量(3);
笔划(0,0,255);
对于(int i=0;i
请注意,场景在每一帧中都会连续重画。在绘制场景之前,必须通过“清除”整个窗口

见结果: