Got it working (added some Jira issues too). Thanks. -- Curtis
On Tue, Jun 14, 2011 at 11:53 AM, Luc Maisonobe <luc.maison...@free.fr> wrote: > Hi Curtis, > > Le 14/06/2011 19:38, Curtis Jensen a écrit : >> >> In the commons math 3.0 Geometry package, How can get the intersection >> of two SubLines? I see that the Line class has an intersection >> method, but not the SubLine class. I can create Lines from SubLines >> and call the intersection method, but I'm not sure how to tell if the >> resultant Vector is on the SubLines. > > There is not (yet) any convenient method to get such a point. However, it > would be interesting to add one. Feel free to open a Jira issue to ask for > it ig you want. > > In the mean time, the proper way to compute this point is as follows: > > // retrieve the underlying lines (it does not recreate them) > Line line1 = (Line) subLine1.getHyperplane(); > Line line2 = (Line) subLine2.getHyperplane(); > > // compute the intersection on infinite line > Vector2D v2D = line1.intersection(line2); > > // check location of point with respect to first sub-line > Location loc1 = > sub1.getRemainingRegion().checkPoint(l1.toSubSpace(v2D)); > > // check location of point with respect to second sub-line > Location loc2 = > sub2.getRemainingRegion().checkPoint(l2.toSubSpace(v2D)); > > You can the compare loc1 and loc2 as you want. If you want strict inclusion > (i.e. without endpoints) you should simply do > > if ((loc1 == INSIDE) && (loc2 == INSIDE)) { > return v2D; > } else { > return null; // or throw an exception > } > > and if you want to large inclusion (i.e. with endpoints) you should do > > if ((loc1 != OUTSIDE) && (loc2 != OUTSIDE)) { > return v2D; > } else { > return null; // or throw an exception > } > > There are three possible values for Location: INSIDE, OUTSIDE and BOUNDARY. > >> >> Also, How do I get the end points of the SubLine. > > Here again, there is no convenience function. If you are sure you subline is > only one segment and not several disjoints segments, you can do: > > IntervalSet is = (IntervalsSet) sub1.getRemainingRegion(); > Vector2D start = line1.toSpace(new Vector1D(is.getInf())); > Vector2D end = line1.toSpace(new Vector1D(is.getSup())); > > If there may be several disjoint segments, use the asList method from > IntervalSet to retrieve all segments, and perform a loop to convert the 1D > abscissa into a 2D point, using line.toSpace. > > Here again, if you think it would be interesting, open a Jira issue to ask > for a convenience function for that. In the same spirit, I guess a > constructor with the two endpoints may be interesting. > > Hope this helps > Luc > >> >> Thanks, >> Curtis >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >> For additional commands, e-mail: user-h...@commons.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org