docs: @SuppressWarnings({"checkstyle:parameternumber", "checkstyle:cyclomaticcomplexity",
              "checkstyle:npathcomplexity"})
      private void crossSegmentTwoShadowLines(
              int shadowX0, int shadowY0, int shadowZ0,
              int shadowX1, int shadowY1, int shadowZ1,
              int sx0, int sy0, int sz0,
              int sx1, int sy1, int sz1) {
          // Update the global bounds of the shadow.
          final int shadowXmin = Math.min(shadowX0, shadowX1);
          final int shadowXmax = Math.max(shadowX0, shadowX1);
          final int shadowYmin = Math.min(shadowY0, shadowY1);
          final int shadowYmax = Math.max(shadowY0, shadowY1);
  
          if (sy0 < shadowYmin && sy1 < shadowYmin) {
              // The segment is entirely at the bottom of the shadow.
              return;
          }
          if (sy0 > shadowYmax && sy1 > shadowYmax) {
              // The segment is entirely at the top of the shadow.
              return;
          }
          if (sx0 < shadowXmin && sx1 < shadowXmin) {
              // The segment is entirely at the left of the shadow.
              return;
          }
          if (sx0 > shadowXmax && sx1 > shadowXmax) {
              // The line is entirely at the right of the shadow
              if (sy1 != sy0) {
                  final double alpha = (sx1 - sx0) / (sy1 - sy0);
                  if (sy0 < sy1) {
                      if (sy0 <= shadowYmin) {
                          final int xintercept = (int) Math.round(sx0 + (shadowYmin - sy0) * alpha);
                          setCrossingCoordinateForYMin(xintercept, shadowYmin);
                          ++this.crossings;
                      }
                      if (sy1 >= shadowYmax) {
                          final int xintercept = (int) Math.round(sx0 + (shadowYmax - sy0) * alpha);
                          setCrossingCoordinateForYMax(xintercept, shadowYmax);
                          ++this.crossings;
                      }
                  } else {
                      if (sy1 <= shadowYmin) {
                          final int xintercept = (int) Math.round(sx0 + (shadowYmin - sy0) * alpha);
                          setCrossingCoordinateForYMin(xintercept, shadowYmin);
                          --this.crossings;
                      }
                      if (sy0 >= shadowYmax) {
                          final int xintercept = (int) Math.round(sx0 + (shadowYmax - sy0) * alpha);
                          setCrossingCoordinateForYMax(xintercept, shadowYmax);
                          --this.crossings;
                      }
                  }
              }
          } else if (Segment2ai.intersectsSegmentSegment(
                  shadowX0, shadowY0, shadowX1, shadowY1,
                  sx0, sy0, sx1, sy1)) {
              // The segment is intersecting the shadowed segment.
              this.crossings = GeomConstants.SHAPE_INTERSECTS;
          } else {
              final int side1;
              final int side2;
              final boolean isUp = shadowY0 <= shadowY1;
              if (isUp) {
                  side1 = Segment2ai.findsSideLinePoint(
                          shadowX0, shadowY0,
                          shadowX1, shadowY1,
                          sx0, sy0);
                  side2 = Segment2ai.findsSideLinePoint(
                          shadowX0, shadowY0,
                          shadowX1, shadowY1,
                          sx1, sy1);
              } else {
                  side1 = Segment2ai.findsSideLinePoint(
                          shadowX1, shadowY1,
                          shadowX0, shadowY0,
                          sx0, sy0);
                  side2 = Segment2ai.findsSideLinePoint(
                          shadowX1, shadowY1,
                          shadowX0, shadowY0,
                          sx1, sy1);
              }
              if (side1 > 0 || side2 > 0) {
                  final int x0;
                  final int x1;
                  if (shadowY0 <= shadowY1) {
                      x0 = shadowX0;
                      x1 = shadowX1;
                  } else {
                      x0 = shadowX1;
                      x1 = shadowX0;
                  }
  
                  crossSegmentShadowLine(
                          x1, shadowYmax,
                          sx0, sy0, sx1, sy1,
                          isUp);
                  crossSegmentShadowLine(
                          x0, shadowYmin,
                          sx0, sy0, sx1, sy1,
                          !isUp);
              }
          }
      }