List of usage examples for java.lang Math toRadians
public static double toRadians(double angdeg)
From source file:org.apache.calcite.runtime.SqlFunctions.java
/** SQL <code>RADIANS</code> operator applied to double values. */ public static double radians(double b0) { return Math.toRadians(b0); }
From source file:com.jillesvangurp.geo.GeoGeometry.java
/** * Calculate the approximate area. Like the distance, this is an approximation and you should account for an error * of about half a percent.//from w ww.jav a2 s . c om * * @param polygon linestring * @return approximate area. */ public static double area(double[][] polygon) { Validate.isTrue(polygon.length > 3, "polygon should have at least three elements"); double total = 0; double[] previous = polygon[0]; double[] center = polygonCenter(polygon); double xRef = center[0]; double yRef = center[1]; for (int i = 1; i < polygon.length; i++) { double[] current = polygon[i]; // convert to cartesian coordinates in meters, note this not very exact double x1 = ((previous[0] - xRef) * (6378137 * PI / 180)) * Math.cos(yRef * PI / 180); double y1 = (previous[1] - yRef) * (Math.toRadians(6378137)); double x2 = ((current[0] - xRef) * (6378137 * PI / 180)) * Math.cos(yRef * PI / 180); double y2 = (current[1] - yRef) * (Math.toRadians(6378137)); // calculate crossproduct total += x1 * y2 - x2 * y1; previous = current; } return 0.5 * Math.abs(total); }
From source file:gwap.rest.LocationService.java
/** * Berechnet die Entfernung zwischen position und destination in Metern. * @param positionLatitude: Latitude der Ausgangsposition * @param positionLongitude: Longitude der Ausgangsposition * @param destinationLatitude: Latitude des Ziels * @param destinationLongitude: Longitude des Ziels * @return Entfernung in Metern/* w w w. j a va 2s. com*/ */ private Double getDistance(double positionLatitude, double positionLongitude, double destinationLatitude, double destinationLongitude) { double earthRadius = 6369000; double dLat = Math.toRadians(destinationLatitude - positionLatitude); double dLng = Math.toRadians(destinationLongitude - positionLongitude); double sindLat = Math.sin(dLat / 2); double sindLng = Math.sin(dLng / 2); double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) * Math.cos(Math.toRadians(positionLatitude)) * Math.cos(Math.toRadians(destinationLatitude)); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = earthRadius * c; return distance; }
From source file:jp.furplag.util.commons.NumberUtils.java
/** * {@link java.lang.Math#toRadians(double)}. * * @param degrees/* ww w .j a v a2 s .c om*/ * @return the radian represented by specified angle. */ public static double toRadians(final Number degrees) { if (Float.class.equals(NumberObject.of(degrees).wrapper)) return Math.toRadians(valueOf(degrees, float.class)); return valueOf(degrees, double.class) / 180d * Math.PI; }
From source file:com.appnativa.rare.ui.chart.jfreechart.ChartHandler.java
protected void setLabelAngel(iPlatformComponent chartPanel, ChartDefinition cd, boolean range) { Axis a = getAxis(cd, range);// w w w. ja v a 2s . c om int angle = range ? cd.getRangeAxis().getAngle() : cd.getDomainAxis().getAngle(); if (a != null) { float ang = (float) Math.toRadians(angle); if (!SNumber.isEqual(ang, a.getLabelAngle())) { a.setLabelAngle(ang); LabelData[] labels = null; if (a instanceof NumberAxisEx) { labels = ((NumberAxisEx) a).categoryLabels; } else if (a instanceof NumberAxis3DEx) { labels = ((NumberAxis3DEx) a).categoryLabels; } if (labels != null) { UIFont f = getAxisLabelFont(cd.getRangeAxis()); remeasureLabels(labels, UIFontMetrics.getMetrics(f), angle); } } } }
From source file:spectrogram.Spectrogram.java
private void drawRotatedText(int tx, int ty, double theta, String text) { AffineTransform fontAT = new AffineTransform(); fontAT.setToIdentity();//from w ww. j a v a 2 s.c o m fontAT.rotate(Math.toRadians(theta)); Font curFont = grph.getFont(); Font rotFont = curFont.deriveFont(fontAT); grph.setFont(rotFont); grph.drawString(text, tx, ty); grph.setFont(curFont); }
From source file:spinworld.gui.RadarPlot.java
private void drawTicks(Graphics2D g2, Rectangle2D radarArea, double axisAngle, int cat) { double[] ticks = { 0.5d, 1d }; for (int i = 0; i < ticks.length; i++) { double tick = ticks[i]; Point2D middlePoint = getWebPoint(radarArea, axisAngle, tick); double xt = middlePoint.getX(); double yt = middlePoint.getY(); double angrad = Math.toRadians(-axisAngle); g2.translate(xt, yt);//from ww w . j a v a2 s .co m g2.rotate(angrad); g2.drawLine(0, (int) -TICK_MARK_LENGTH / 2, 0, (int) TICK_MARK_LENGTH / 2); g2.rotate(-angrad); g2.translate(-xt, -yt); drawTickLabel(g2, radarArea, middlePoint, axisAngle, cat, tick); } }
From source file:SIFT_Volume_Stitching.java
/** Rotation at 90, 180 and 270 only of the image stack @param image//from w w w .ja v a 2s .c o m @param rotation around x @param rotation around y @param rotation around z @return rotated image */ public ImagePlus StackRotation(ImagePlus imp, int Rx, int Ry, int Rz) { /* Parameters */ int Xm = imp.getWidth(); int Ym = imp.getHeight(); int Zm = imp.getStackSize(); ImageStack impStack = imp.getStack(); int x = Xm; int y = Ym; int z = Zm; int cosRx = (int) Math.round(Math.cos(Math.toRadians(Rx))); int sinRx = (int) Math.round(Math.sin(Math.toRadians(Rx))); int cosRy = (int) Math.round(Math.cos(Math.toRadians(Ry))); int sinRy = (int) Math.round(Math.sin(Math.toRadians(Ry))); int cosRz = (int) Math.round(Math.cos(Math.toRadians(Rz))); int sinRz = (int) Math.round(Math.sin(Math.toRadians(Rz))); /* New Stack Size */ int newZm = ((x * sinRz + y * cosRz) * sinRx + z * cosRx) * cosRy - (x * cosRz - y * sinRz) * sinRy; int newXm = ((x * sinRz + y * cosRz) * sinRx + z * cosRx) * sinRy + (x * cosRz - y * sinRz) * cosRy; int newYm = (x * sinRz + y * cosRz) * cosRx - z * sinRx; /* Image Creation */ ImagePlus impR = NewImage.createImage("Rotation", Math.abs(newXm), Math.abs(newYm), Math.abs(newZm), imp.getBitDepth(), 1); ImageStack imgR = impR.getStack(); /* Calibration */ Calibration cal = new Calibration(); double Cx = imp.getCalibration().pixelWidth; double Cy = imp.getCalibration().pixelHeight; double Cz = imp.getCalibration().pixelDepth; double newCz = Math .abs(((Cx * sinRz + Cy * cosRz) * sinRx + Cz * cosRx) * cosRy - (Cx * cosRz - Cy * sinRz) * sinRy); double newCx = Math .abs(((Cx * sinRz + Cy * cosRz) * sinRx + Cz * cosRx) * sinRy + (Cx * cosRz - Cy * sinRz) * cosRy); double newCy = Math.abs((Cx * sinRz + Cy * cosRz) * cosRx - Cz * sinRx); cal.pixelWidth = newCx; cal.pixelHeight = newCy; cal.pixelDepth = newCz; cal.setUnit(imp.getCalibration().getUnit()); /* Rotation */ int max = 0; int newX = 0; int newY = 0; int newZ = 0; for (z = 0; z < Zm; z++) { for (x = 0; x < Xm; x++) { for (y = 0; y < Ym; y++) { newZ = ((x * sinRz + y * cosRz) * sinRx + z * cosRx) * cosRy - (x * cosRz - y * sinRz) * sinRy; if (newZm < 0) { newZ = newZ - newZm - 1; } newX = ((x * sinRz + y * cosRz) * sinRx + z * cosRx) * sinRy + (x * cosRz - y * sinRz) * cosRy; if (newXm < 0) { newX = newX - newXm - 1; } newY = (x * sinRz + y * cosRz) * cosRx - z * sinRx; if (newYm < 0) { newY = newY - newYm - 1; } imgR.setVoxel(newX, newY, newZ, impStack.getVoxel(x, y, z)); if (impStack.getVoxel(x, y, z) > max) { max = (int) impStack.getVoxel(x, y, z); } } } } ImagePlus imp2 = new ImagePlus("imp", imgR); imp2.setCalibration(cal); /** 12 bit Images */ if (255 < max && max <= 4095) { ImagePlus.setDefault16bitRange(12); } return imp2; }
From source file:TransformExplorer.java
CoordSys(float axisLength) { super(Switch.CHILD_ALL); float coordSysLength = axisLength; float labelOffset = axisLength / 20.0f; float axisRadius = axisLength / 500.0f; float arrowRadius = axisLength / 125.0f; float arrowHeight = axisLength / 50.0f; float tickRadius = axisLength / 125.0f; float tickHeight = axisLength / 250.0f; // Set the Switch to allow changes setCapability(Switch.ALLOW_SWITCH_READ); setCapability(Switch.ALLOW_SWITCH_WRITE); // Set up an appearance to make the Axis have // grey ambient, black emmissive, grey diffuse and grey specular // coloring.//from w w w . j a v a2s . com //Material material = new Material(grey, black, grey, white, 64); Material material = new Material(white, black, white, white, 64); Appearance appearance = new Appearance(); appearance.setMaterial(material); // Create a shared group to hold one axis of the coord sys SharedGroup coordAxisSG = new SharedGroup(); // create a cylinder for the central line of the axis Cylinder cylinder = new Cylinder(axisRadius, coordSysLength, appearance); // cylinder goes from -coordSysLength/2 to coordSysLength in y coordAxisSG.addChild(cylinder); // create the shared arrowhead Cone arrowHead = new Cone(arrowRadius, arrowHeight, appearance); SharedGroup arrowHeadSG = new SharedGroup(); arrowHeadSG.addChild(arrowHead); // Create a TransformGroup to move the arrowhead to the top of the // axis // The arrowhead goes from -arrowHeight/2 to arrowHeight/2 in y. // Put it at the top of the axis, coordSysLength / 2 tmpVector.set(0.0f, coordSysLength / 2 + arrowHeight / 2, 0.0f); tmpTrans.set(tmpVector); TransformGroup topTG = new TransformGroup(); topTG.setTransform(tmpTrans); topTG.addChild(new Link(arrowHeadSG)); coordAxisSG.addChild(topTG); // create the minus arrowhead // Create a TransformGroup to turn the cone upside down: // Rotate 180 degrees around Z axis tmpAxisAngle.set(0.0f, 0.0f, 1.0f, (float) Math.toRadians(180)); tmpTrans.set(tmpAxisAngle); // Put the arrowhead at the bottom of the axis tmpVector.set(0.0f, -coordSysLength / 2 - arrowHeight / 2, 0.0f); tmpTrans.setTranslation(tmpVector); TransformGroup bottomTG = new TransformGroup(); bottomTG.setTransform(tmpTrans); bottomTG.addChild(new Link(arrowHeadSG)); coordAxisSG.addChild(bottomTG); // Now add "ticks" at 1, 2, 3, etc. // create a shared group for the tick Cylinder tick = new Cylinder(tickRadius, tickHeight, appearance); SharedGroup tickSG = new SharedGroup(); tickSG.addChild(tick); // transform each instance and add it to the coord axis group int maxTick = (int) (coordSysLength / 2); int minTick = -maxTick; for (int i = minTick; i <= maxTick; i++) { if (i == 0) continue; // no tick at 0 // use a TransformGroup to offset to the tick location TransformGroup tickTG = new TransformGroup(); tmpVector.set(0.0f, (float) i, 0.0f); tmpTrans.set(tmpVector); tickTG.setTransform(tmpTrans); // then link to an instance of the Tick shared group tickTG.addChild(new Link(tickSG)); // add the TransformGroup to the coord axis coordAxisSG.addChild(tickTG); } // add a Link to the axis SharedGroup to the coordSys addChild(new Link(coordAxisSG)); // Y axis // Create TransformGroups for the X and Z axes TransformGroup xAxisTG = new TransformGroup(); // rotate 90 degrees around Z axis tmpAxisAngle.set(0.0f, 0.0f, 1.0f, (float) Math.toRadians(90)); tmpTrans.set(tmpAxisAngle); xAxisTG.setTransform(tmpTrans); xAxisTG.addChild(new Link(coordAxisSG)); addChild(xAxisTG); // X axis TransformGroup zAxisTG = new TransformGroup(); // rotate 90 degrees around X axis tmpAxisAngle.set(1.0f, 0.0f, 0.0f, (float) Math.toRadians(90)); tmpTrans.set(tmpAxisAngle); zAxisTG.setTransform(tmpTrans); zAxisTG.addChild(new Link(coordAxisSG)); addChild(zAxisTG); // Z axis // Add the labels. First we need a Font3D for the Text3Ds // select the default font, plain style, 0.5 tall. Use null for // the extrusion so we get "flat" text since we will be putting it // into an oriented Shape3D Font3D f3d = new Font3D(new Font("Default", Font.PLAIN, 1), null); // set up the +X label Text3D plusXText = new Text3D(f3d, "+X", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D plusXTextShape = new OrientedShape3D(plusXText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup plusXTG = new TransformGroup(); tmpVector.set(coordSysLength / 2 + labelOffset, 0.0f, 0.0f); tmpTrans.set(0.15f, tmpVector); plusXTG.setTransform(tmpTrans); plusXTG.addChild(plusXTextShape); addChild(plusXTG); // set up the -X label Text3D minusXText = new Text3D(f3d, "-X", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D minusXTextShape = new OrientedShape3D(minusXText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup minusXTG = new TransformGroup(); tmpVector.set(-coordSysLength / 2 - labelOffset, 0.0f, 0.0f); tmpTrans.set(0.15f, tmpVector); minusXTG.setTransform(tmpTrans); minusXTG.addChild(minusXTextShape); addChild(minusXTG); // set up the +Y label Text3D plusYText = new Text3D(f3d, "+Y", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D plusYTextShape = new OrientedShape3D(plusYText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup plusYTG = new TransformGroup(); tmpVector.set(0.0f, coordSysLength / 2 + labelOffset, 0.0f); tmpTrans.set(0.15f, tmpVector); plusYTG.setTransform(tmpTrans); plusYTG.addChild(plusYTextShape); addChild(plusYTG); // set up the -Y label Text3D minusYText = new Text3D(f3d, "-Y", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D minusYTextShape = new OrientedShape3D(minusYText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup minusYTG = new TransformGroup(); tmpVector.set(0.0f, -coordSysLength / 2 - labelOffset, 0.0f); tmpTrans.set(0.15f, tmpVector); minusYTG.setTransform(tmpTrans); minusYTG.addChild(minusYTextShape); addChild(minusYTG); // set up the +Z label Text3D plusZText = new Text3D(f3d, "+Z", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D plusZTextShape = new OrientedShape3D(plusZText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup plusZTG = new TransformGroup(); tmpVector.set(0.0f, 0.0f, coordSysLength / 2 + labelOffset); tmpTrans.set(0.15f, tmpVector); plusZTG.setTransform(tmpTrans); plusZTG.addChild(plusZTextShape); addChild(plusZTG); // set up the -Z label Text3D minusZText = new Text3D(f3d, "-Z", origin, Text3D.ALIGN_CENTER, Text3D.PATH_RIGHT); // orient around the local origin OrientedShape3D minusZTextShape = new OrientedShape3D(minusZText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, origin); // transform to scale down to 0.15 in height, locate at end of axis TransformGroup minusZTG = new TransformGroup(); tmpVector.set(0.0f, 0.0f, -coordSysLength / 2 - labelOffset); tmpTrans.set(0.15f, tmpVector); minusZTG.setTransform(tmpTrans); minusZTG.addChild(minusZTextShape); addChild(minusZTG); }
From source file:spinworld.gui.RadarPlot.java
private void drawTickLabel(Graphics2D g2, Rectangle2D radarArea, Point2D middlePoint, double _axisAngle, int cat, double tick) { double axisAngle = normalize(_axisAngle); double _origin = getOrigin(cat).doubleValue(); double max = getMaxValue(cat).doubleValue(); double tickValue = ((max - _origin) * tick) + _origin; String label = "" + Math.round(tickValue * 1000) / 1000d; FontRenderContext frc = g2.getFontRenderContext(); Rectangle2D labelBounds = getLabelFont().getStringBounds(label, frc); int labelW = (int) labelBounds.getWidth(); int labelH = (int) labelBounds.getHeight(); double centerX = radarArea.getCenterX(); double centerY = radarArea.getCenterY(); double adj = middlePoint.distance(centerX, centerY); double opp = TICK_MARK_LENGTH / 2 + 4; double hyp = Math.sqrt(Math.pow(opp, 2) + Math.pow(adj, 2)); double angle = Math.toDegrees(Math.atan(opp / adj)); int charHeight = g2.getFontMetrics().getHeight(); int charWidth = g2.getFontMetrics().charWidth('M'); double alphaRad = Math.toRadians(axisAngle - angle); double labelX = centerX + (hyp * Math.cos(alphaRad)); double labelY = centerY - (hyp * Math.sin(alphaRad)) + labelH; // g2.draw(new Line2D.Double(centerX, centerY, labelX, labelY - labelH)); // test line double sinGap = Math.pow(Math.sin(Math.toRadians(axisAngle)), 2); if (axisAngle > 90 && axisAngle < 270) { labelY -= labelH;//from w w w . jav a2 s . c o m labelY += (charHeight * sinGap / 2); } else { labelY -= (charHeight * sinGap / 2); } double cosGap = Math.pow(Math.cos(Math.toRadians(axisAngle)), 2); if (axisAngle > 180) { labelX -= labelW; labelX += (charWidth * cosGap / 2); } else { labelX -= (charWidth * cosGap / 2); } // g2.drawRect((int) labelX, (int) labelY - labelH, labelW, labelH); // test rectangle g2.setPaint(getLabelPaint()); g2.setFont(getLabelFont()); g2.drawString(label, (float) labelX, (float) labelY); }