void makeEllipse(double x1, double y1, double x2, double y2) { double centerX = (x1 + x2)/2.0; double centerY = (y1 + y2)/2.0; double dx = x2 - x1; double dy = y2 - y1; double major = Math.sqrt(dx*dx + dy*dy); double minor = major*aspectRatio; double phiB = Math.atan2(dy, dx); double alpha = phiB*180.0/Math.PI; nPoints = 0; for (int i=0; i<vertices; i++) { double degrees = i*360.0/vertices; double beta1 = degrees/180.0*Math.PI; dx = Math.cos(beta1)*major/2.0; dy = Math.sin(beta1)*minor/2.0; double beta2 = Math.atan2(dy, dx); double rad = Math.sqrt(dx*dx + dy*dy); double beta3 = beta2+ alpha/180.0*Math.PI; double dx2 = Math.cos(beta3)*rad; double dy2 = Math.sin(beta3)*rad; xpf[nPoints] = (float)(centerX+dx2); ypf[nPoints] = (float)(centerY+dy2); nPoints++; } makePolygonRelative(); cachedMask = null; showStatus(); }
void makeEllipse(double x1, double y1, double x2, double y2) { double centerX = (x1 + x2)/2.0; double centerY = (y1 + y2)/2.0; double dx = x2 - x1; double dy = y2 - y1; double major = Math.sqrt(dx*dx + dy*dy); double minor = major*aspectRatio; double phiB = Math.atan2(dy, dx); double alpha = phiB*180.0/Math.PI; nPoints = 0; for (int i=0; i<vertices; i++) { double degrees = i*360.0/vertices; double beta1 = degrees/180.0*Math.PI; dx = Math.cos(beta1)*major/2.0; dy = Math.sin(beta1)*minor/2.0; double beta2 = Math.atan2(dy, dx); double rad = Math.sqrt(dx*dx + dy*dy); double beta3 = beta2+ alpha/180.0*Math.PI; double dx2 = Math.cos(beta3)*rad; double dy2 = Math.sin(beta3)*rad; xpf[nPoints] = (float)(centerX+dx2); ypf[nPoints] = (float)(centerY+dy2); nPoints++; } makePolygonRelative(); cachedMask = null; showStatus(); }
public void nudgeCorner(int key) { if (ic==null) return; double x1 = xpf[handle[2]]+x; double y1 = ypf[handle[2]]+y; double x2 = xpf[handle[0]]+x; double y2 = ypf[handle[0]]+y; double inc = 1.0/ic.getMagnification(); switch(key) { case KeyEvent.VK_UP: y2-=inc; break; case KeyEvent.VK_DOWN: y2+=inc; break; case KeyEvent.VK_LEFT: x2-=inc; break; case KeyEvent.VK_RIGHT: x2+=inc; break; } makeEllipse(x1, y1, x2, y2); imp.draw(); notifyListeners(RoiListener.MOVED); showStatus(); }
public void nudgeCorner(int key) { if (ic==null) return; double x1 = xpf[handle[2]]+x; double y1 = ypf[handle[2]]+y; double x2 = xpf[handle[0]]+x; double y2 = ypf[handle[0]]+y; double inc = 1.0/ic.getMagnification(); switch(key) { case KeyEvent.VK_UP: y2-=inc; break; case KeyEvent.VK_DOWN: y2+=inc; break; case KeyEvent.VK_LEFT: x2-=inc; break; case KeyEvent.VK_RIGHT: x2+=inc; break; } makeEllipse(x1, y1, x2, y2); imp.draw(); notifyListeners(RoiListener.MOVED); showStatus(); }