在处理中使用缩放函数时收到以下错误:InternalError:java.awt.geom.NoninvertibleTransformException:行列式为0

在处理中使用缩放函数时收到以下错误:InternalError:java.awt.geom.NoninvertibleTransformException:行列式为0,java,processing,zooming,Java,Processing,Zooming,我在处理过程中设置了缩放功能,减小缩放时出现以下错误: InternalError:java.awt.geom.NoninvertibleTransformException:行列式为0 该代码在其他用途中运行良好,但在我当前的代码中失败: int zoom = 0; void draw() { // background color background(#F0F8FF); // plot area fill(#FFFFFF); rectMode(CORNERS);

我在处理过程中设置了缩放功能,减小缩放时出现以下错误:

InternalError:java.awt.geom.NoninvertibleTransformException:行列式为0

该代码在其他用途中运行良好,但在我当前的代码中失败:

int zoom = 0;
void draw() {
  // background color
  background(#F0F8FF);

  // plot area  
  fill(#FFFFFF);
  rectMode(CORNERS);
  noStroke();
  rect(plotX1, plotY1, plotX2, plotY2);

//allows zoom
  scale(zoom);
  drawTitleTabs();
  drawAxisLabels();
  drawVolumeLabels();

  // data area color
  fill(#009900);
  drawDataArea(currentColumn);

  drawXTickMarks();
  // rollover color
  stroke(#5679C1);
  noFill();
  strokeWeight(2);
  drawDataHighlight(currentColumn);

  // legend
  textSize(16);
  fill(#000000);
  textAlign(LEFT);
  text("1. Press spacebar to\ntoggle gridlines.\n2. Click on tabs to\nview regions.\n3. Hover over top of\ncolumn to see\naverage temperature.", 1315, 200);
}
 //add zoom using up and down arrow
  if (key == CODED) {
    if (keyCode == UP) {
      zoom+= 0.3;
    } else if (keyCode == DOWN) {
      zoom-= 0.3;
    }
  }

这只是代码的一部分,如果需要,我可以发布其余部分。

错误是由
scale(zoom)
引起的,当
zoom
为0.0时。矩阵运算类似于,定义一个新矩阵,并将当前矩阵乘以新矩阵。如果
zoom
为0.0,则生成的缩放矩阵是一个矩阵,其中所有字段也为0.0。这将导致未定义的行为,因为会生成错误

通过计算if
zoom>0.0
,可以防止出现错误:

if(缩放>0.0){
缩放(缩放);
}
或者通过限制
缩放
。计算小正值的最大值()并缩放:

缩放(最大值(0.01,缩放));

此外,
zoom
必须是浮点变量:

int-zoom=0

float-zoom=0;

在哪一行出现此错误?这解决了我的问题,但除此之外,我必须将缩放变量更改为浮点。@user11861166我明白了。这似乎是你代码中的一个输入错误。不管怎样,我已经在答案中添加了这一点。