-\r
-\r
- @Override\r
- public Amount<Length> webThickness() {\r
- return webThickness;\r
- }\r
- \r
- private Amount<Length> perimeter(java.awt.geom.Area a){\r
- PathIterator i = a.getPathIterator(new AffineTransform(), .001);\r
- double x=0, y=0;\r
- double len = 0;\r
- while ( !i.isDone() ){\r
- double coords[] = new double[6];\r
- int type = i.currentSegment(coords);\r
- if ( type == PathIterator.SEG_LINETO ){\r
- //System.out.println("Line");\r
- double nx = coords[0];\r
- double ny = coords[1];\r
- //System.out.println(x+","+y+ " to " + nx+"," + ny);\r
- len += Math.sqrt(Math.pow(x-nx, 2) + Math.pow(y-ny,2));\r
- x = nx;\r
- y = ny;\r
- } else if ( type == PathIterator.SEG_MOVETO ){\r
- //System.out.println("Move");\r
- x = coords[0];\r
- y = coords[1];\r
- } else {\r
- //System.err.println("Got " + type);\r
- }\r
- i.next();\r
- }\r
- return Amount.valueOf(len, SI.MILLIMETER);\r
- }\r
- \r
- private void findWebThickness(){\r
- java.awt.geom.Area a = getArea(Amount.valueOf(0, SI.MILLIMETER));\r
- Rectangle r = a.getBounds();\r
- double max = r.getWidth()<r.getHeight()?r.getHeight():r.getWidth(); //The max size\r
- double min = 0;\r
- double guess;\r
- while(true){\r
- guess = min + (max-min)/2; //Guess halfway through\r
- System.out.println("Min: " + min + " Guess: " + guess + " Max: " + max);\r
- a = getArea(Amount.valueOf(guess, SI.MILLIMETER));\r
- if ( a.isEmpty() ){\r
- //guess is too big\r
- max = guess;\r
- } else {\r
- //min is too big\r
- min = guess;\r
- }\r
- if ( (max-min) < .01 )\r
- break;\r
- }\r
- webThickness = Amount.valueOf(guess, SI.MILLIMETER);\r
- if ( webThickness.isGreaterThan(length.divide(2)))\r
- webThickness = length.divide(2);\r
- }\r
- private java.awt.geom.Area getArea(Amount<Length> regression){\r
- java.awt.geom.Area a = new java.awt.geom.Area();\r
- for ( Shape s: plus )\r
- a.add(new java.awt.geom.Area(regress(s, regression.doubleValue(SI.MILLIMETER), true)));\r
- for ( Shape s: minus )\r
- a.subtract(new java.awt.geom.Area(regress(s, regression.doubleValue(SI.MILLIMETER), false)));\r
- return a;\r