Receiving the following error when using zoom function in processing: InternalError: java.awt.geom.NoninvertibleTransformException: Determinant is 0
Receiving the following error when using zoom function in processing: InternalError: java.awt.geom.NoninvertibleTransformException: Determinant is 0
我在处理中设置了缩放功能,当减小缩放时出现以下错误:
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;
}
}
这只是代码的一小部分,如果需要,我可以post其余部分。
当 zoom
为 0.0 时,错误是由 scale(zoom)
引起的。 scale
, rotate
and translate
之类的矩阵运算定义了一个新矩阵,并将当前矩阵乘以新矩阵。如果 zoom
为 0.0,则生成的缩放矩阵也是所有字段均为 0.0 的矩阵。这将导致未定义的行为,因为会生成错误。
您可以通过评估 if zoom > 0.0
:
来防止错误
if (zoom > 0.0) {
scale(zoom);
}
或通过限制zoom
。计算一个小正值的最大值 (max
) 和 zoom
:
scale(max(0.01, zoom));
此外zoom
必须是一个浮点变量:
int zoom = 0;
float zoom = 0;
我在处理中设置了缩放功能,当减小缩放时出现以下错误:
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;
}
}
这只是代码的一小部分,如果需要,我可以post其余部分。
当 zoom
为 0.0 时,错误是由 scale(zoom)
引起的。 scale
, rotate
and translate
之类的矩阵运算定义了一个新矩阵,并将当前矩阵乘以新矩阵。如果 zoom
为 0.0,则生成的缩放矩阵也是所有字段均为 0.0 的矩阵。这将导致未定义的行为,因为会生成错误。
您可以通过评估 if zoom > 0.0
:
if (zoom > 0.0) {
scale(zoom);
}
或通过限制zoom
。计算一个小正值的最大值 (max
) 和 zoom
:
scale(max(0.01, zoom));
此外zoom
必须是一个浮点变量:
int zoom = 0;
float zoom = 0;