/** * Returns the closest point on the contour to the provided point in space * @return index of closest point */ int closestPoint( Point2D_F64 target ) { double bestDistance = Double.MAX_VALUE; int bestIndex = -1; for (int i = 0; i < contour.size(); i++) { Point2D_I32 c = contour.get(i); double d = UtilPoint2D_F64.distanceSq(target.x,target.y,c.x,c.y); if( d < bestDistance ) { bestDistance = d; bestIndex = i; } } return bestIndex; } }
public static void quadToRectRot( Quadrilateral_F64 q , RectangleRotate_F32 r ) { double centerX = (q.a.x + q.b.x + q.c.x + q.d.x)/4.0; double centerY = (q.a.y + q.b.y + q.c.y + q.d.y)/4.0; double topX = (q.a.x + q.b.x)/2.0; double topY = (q.a.y + q.b.y)/2.0; double sideX = (q.b.x + q.c.x)/2.0; double sideY = (q.b.y + q.c.y)/2.0; r.cx = (float)centerX; r.cy = (float)centerY; r.height = 2*(float)UtilPoint2D_F64.distance(topX,topY,centerX,centerY); r.width = 2*(float)UtilPoint2D_F64.distance(sideX,sideY,centerX,centerY); r.theta = (float)Math.atan2( sideY - centerY , sideX - centerX ); }
UtilPoint2D_F64.mean(points,center);
UtilPoint2D_F64.mean(points,center);
@Override public double computeDistance(AssociatedTriple pt) { transfer.transfer_1_to_3(pt.p1.x,pt.p1.y,pt.p2.x,pt.p2.y,c); double error = UtilPoint2D_F64.distanceSq(c.x/c.z, c.y/c.z, pt.p3.x, pt.p3.y); transfer.transfer_1_to_2(pt.p1.x,pt.p1.y,pt.p3.x,pt.p3.y,c); error += UtilPoint2D_F64.distanceSq(c.x/c.z, c.y/c.z, pt.p2.x, pt.p2.y); return error; }
UtilPoint2D_F64.mean(polygon.vertexes.data,0,polygon.size(),n.center);
public static void quadToRectRot( Quadrilateral_F64 q , RectangleRotate_F64 r ) { double centerX = (q.a.x + q.b.x + q.c.x + q.d.x)/4.0; double centerY = (q.a.y + q.b.y + q.c.y + q.d.y)/4.0; double topX = (q.a.x + q.b.x)/2.0; double topY = (q.a.y + q.b.y)/2.0; double sideX = (q.b.x + q.c.x)/2.0; double sideY = (q.b.y + q.c.y)/2.0; r.cx = centerX; r.cy = centerY; r.height = 2*UtilPoint2D_F64.distance(topX,topY,centerX,centerY); r.width = 2*UtilPoint2D_F64.distance(sideX,sideY,centerX,centerY); r.theta = Math.atan2( sideY - centerY , sideX - centerX ); }
private void findBestPoints(int x, int y, List<Point2D_F64> pts , List<Integer> selected ) { double bestDist = clickDistance*clickDistance; GrowQueue_I32 bestIndexes = new GrowQueue_I32(20); for( int i = 0; i < pts.size(); i++ ) { if( !isValidPoint(i) ) continue; Point2D_F64 p = pts.get(i); double d = UtilPoint2D_F64.distanceSq(p.x, p.y, x, y); if( d < bestDist ) { bestDist = d; bestIndexes.reset(); bestIndexes.add(i); } else if( Math.abs(d - bestDist) < 0.01 ) { bestIndexes.add(i); } } if( bestIndexes.size() > 0 ) { int indexRight = bestIndexes.get(0); } for (int i = 0; i < bestIndexes.size(); i++) { selected.add(bestIndexes.get(i)); } }
private void findBestPoints(int x, int y, List<Point2D_F64> pts , List<Integer> selected ) { double bestDist = clickDistance*clickDistance; GrowQueue_I32 bestIndexes = new GrowQueue_I32(20); for( int i = 0; i < pts.size(); i++ ) { if( !isValidPoint(i) ) continue; Point2D_F64 p = pts.get(i); double d = UtilPoint2D_F64.distanceSq(p.x, p.y, x, y); if( d < bestDist ) { bestDist = d; bestIndexes.reset(); bestIndexes.add(i); } else if( Math.abs(d - bestDist) < 0.01 ) { bestIndexes.add(i); } } if( bestIndexes.size() > 0 ) { int indexRight = bestIndexes.get(0); } for (int i = 0; i < bestIndexes.size(); i++) { selected.add(bestIndexes.get(i)); } }