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

标签 java processing zooming

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

InternalError: java.awt.geom.NoninvertibleTransformException: Determinant is 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;
    }
  }

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

最佳答案

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

您可以通过评估 zoom > 0.0 来防止错误:

if (zoom > 0.0) {
    scale(zoom);
}

或通过限制缩放。计算较小正值的最大值 ( max ) 并缩放:

scale(max(0.01, zoom));

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

int Zoom = 0;

float zoom = 0;

关于java - 在处理: InternalError: java. awt.geom.NoninvertibleTransformException时使用缩放功能时收到以下错误:行列式为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62376085/

相关文章:

Java获取包中的所有文件

java - 如何在不同的类中获取2个ArrayList?

java - 使用maven属性插件读取数据库信息

android - 触摸时放大 Canvas 的一部分

iphone - 缩放 UIScrollView 中的多个 subview

zooming - 如何限制变焦?

java - 从非域地址发送电子邮件

javascript - 从网页调用java方法来生成处理草图并将该草图显示在网页上

javascript - 蛇游戏与自身碰撞

android - Arduino ADK + Android + 处理实例编译报错