[prev in list] [next in list] [prev in thread] [next in thread]
List: jakarta-commons-user
Subject: Re: SubLine Intersection Math 3.0
From: Curtis Jensen <curtis () the-jensens ! org>
Date: 2011-06-14 23:27:16
Message-ID: BANLkTinaqJqGx3vUhmDr6GGqEpz1fq_vcw () mail ! gmail ! com
[Download RAW message or body]
Got it working (added some Jira issues too). Thanks.
--
Curtis
On Tue, Jun 14, 2011 at 11:53 AM, Luc Maisonobe <Luc.Maisonobe@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-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic