Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Intersection of two surfaces in 3D

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52912] Re: [mg52863] Re: [mg52822] Intersection of two surfaces in 3D
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 16 Dec 2004 03:41:35 -0500 (EST)
  • References: <200412141059.FAA24571@smc.vnet.net> <200412150926.EAA10631@smc.vnet.net> <opsi2plik4iz9bcq@monster.ma.dl.cox.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Well, look at the bright side: if you can't see the curve, it probably 
means that it lies on the surface, which is after all what you wanted 
to check ;-)

This is may also be platform dependent, on the Mac I seem to see the 
curves quite clearly. But of course this is the kind of thig where 
Jens' MathGL3d shines. The only problem is that I don't think it works 
very well on the Mac.

Andrzej




On 16 Dec 2004, at 08:45, DrBob wrote:

>>> We simply turn on RealTime graphics with
> << RealTime3D`
>>> Now look at
> Show[g1, pp1]
>>> you can clearly see the curve g1 lying on the surface pp1 (defined by
> you).
>
> Uh, no, g1 is almost completely invisible -- at my desk, anyway. 
> (WinXP, Mathematica 5.1) At some angles I can see parts of g1, but not clearly 
> at all.
>
> To the extent one CAN pick out the lines, these charts are useful 
> (with RealTime3D` loaded):
>
> DisplayTogether[ParametricPlot3D[{x1, y1, z1}, {t1, 0, 2 Pi}, {t2,
>        0, 1}, PolygonIntersections -> False], ParametricPlot3D[{
>       x2, y2, z2}, {s1, 0, 2 Pi}, {s2, 0, 4}],
>     g1];
>
> DisplayTogether[ParametricPlot3D[{x1, y1, z1}, {t1, 0, 2 Pi}, {t2,
>        0, 3}, PolygonIntersections -> False], ParametricPlot3D[{
>       x2, y2, z2}, {s1, 0, 2 Pi}, {s2, 0, 5}],
>     g2];
>
> I can discern bits of g1 and g2 (I think) in the intersections of the 
> surfaces.
>
> I found no way to make the lines more visible.
>
> Bobby
>
> On Wed, 15 Dec 2004 04:26:25 -0500 (EST), Andrzej Kozlowski 
> <akoz at mimuw.edu.pl> wrote:
>
>>
>>
>>
>> On 14 Dec 2004, at 19:59, Narasimham wrote:
>>
>>> *This message was transferred with a trial version of CommuniGate(tm)
>>> Pro*
>>> There are threads currently on sci.math  on this topic. How do we 
>>> find
>>> space intersection curve of two  parameterized surfaces? One needs to
>>> solve for two unknown functions f1(t1,t2)=0 and f2(s1,s2)=0 to print
>>> out/output coordinates of intersection. I do believe it is within the
>>> capability of Mathematica, at least when surfaces are algebraically
>>> generatable. An example/approach considered is:
>>>
>>> Clear[x,y,z,t1,t2,s1,s2];
>>> x1=4*t2* Cos[t1]; y1=4Sin[t1]; z1=3t2;
>>> x2=s2 Sin[s1];y2=s2 Cos[s1];z2=(s2^2/4);
>>> pp1=ParametricPlot3D[{x1,y1,z1},{t1,0,2 Pi},{t2,0,1}];
>>> pp2=ParametricPlot3D[{x2,y2,z2},{s1,0,2 Pi},{s2,0,4}];
>>> Show[pp1,pp2];
>>> S1={x-x1,y-y1,z-z1}; S2={x-x2,y-y2,z-z2};
>>> NSolve[Join[S1,S2],{x,y,z},{t1,t2,s1,s2}];
>>>
>>>
>>
>> In fact in principle Mathematica can fully solve this problem without
>> the need for numerical methods.
>>
>> f = GroebnerBasis[{x - 4*t*Cos[s], y - 4*Sin[s], z - 3*t, Sin[s]^2 +
>> Cos[s]^2 - 1}, {x, y, z}, {t, Sin[s], Cos[s]}]
>>
>> {9*x^2 - 16*z^2 + y^2*z^2}
>>
>> So the space of zeros of the first equation is a subset of the space 
>> of
>> solutions of the Cartesian equation:
>>
>> 9*x^2 - 16*z^2 + y^2*z^2==0
>>
>>
>>   (They may actually be the same, I have not tried to check.)
>>
>>
>> g = GroebnerBasis[{x - t*Sin[s], y - t*Cos[s], z - t^2/4, Sin[s]^2 +
>> Cos[s]^2 - 1}, {x, y, z}, {t, Sin[s], Cos[s]}]
>>
>>
>> {x^2 + y^2 - 4*z}
>>
>> So again all points on the surface satisfy
>>
>> x^2 + y^2 - 4*z==0
>>
>>
>> Let's now try to find the solutions of this
>>
>>
>>
>> sols=Reduce[Join[f, g] == 0, {x, y}, Reals]
>>
>>
>> (0 <= z <= 9/4 && ((x == -Sqrt[(-16*z^2 + 4*z^3)/(-9 + z^2)] && (y ==
>> -Sqrt[-x^2 + 4*z] || y == Sqrt[-x^2 + 4*z])) ||
>>      (x == Sqrt[(-16*z^2 + 4*z^3)/(-9 + z^2)] && (y == -Sqrt[-x^2 + 
>> 4*z]
>> || y == Sqrt[-x^2 + 4*z])))) ||
>>    (z >= 4 && ((x == -Sqrt[(-16*z^2 + 4*z^3)/(-9 + z^2)] && (y ==
>> -Sqrt[-x^2 + 4*z] || y == Sqrt[-x^2 + 4*z])) ||
>>      (x == Sqrt[(-16*z^2 + 4*z^3)/(-9 + z^2)] && (y == -Sqrt[-x^2 + 
>> 4*z]
>> || y == Sqrt[-x^2 + 4*z]))))
>>
>>
>> We can think of these answers as representing several parametric 
>> curves
>> in space. The interesection points of the original surfaces should be
>> contained among them. Unfortunately it takes a bit of work to get it
>> all into the right form. We want to express x and y in terms of z and
>> using z as the parameter (using only the real values of z returned by
>> Reduce) plot the curves. Note that there seem to be two pieces, for
>> 0<z<9/4 and for z>4. One can plot them as follows:
>>
>>
>> g1=ParametricPlot3D[Evaluate[{x, y, z} /. Solve[{x == -Sqrt[(-16*z^2 +
>> 4*z^3)/(-9 + z^2)], y == -Sqrt[-x^2 + 4*z]}, {x, y}]], {z, 0, 9/4}]
>>
>> and
>>
>>
>> g2=ParametricPlot3D[Evaluate[{x, y, z} /. Solve[{x == -Sqrt[(-16*z^2 +
>> 4*z^3)/(-9 + z^2)], y == -Sqrt[-x^2 + 4*z]}, {x, y}]], {z, 4, 8}]
>>
>> In general you expect them to be a superset of the intersection curve.
>> We can try to check this graphically. Doing so is a beautiful
>> application of Mathematica's interactive graphics.
>>
>> We simply turn on RealTime graphics with
>>
>> << RealTime3D`
>>
>> Now look at
>>
>> Show[g1, pp1]
>>
>> you can clearly see the curve g1 lying on the surface pp1 (defined by
>> you).
>>
>> Now do the same thing with pp2:
>>
>> Show[g1, pp2]
>>
>> again by rotating the graphic into a suitable position we can see
>> clearly that the curve also lies on pp2.
>>
>> Replacing g1 by g2 is slightly less convincing. We need to change the
>> parameters in both surface plots because the curve is actually in a
>> different region. But by changing  the plots of the surfaces to
>>
>> pp1 = ParametricPlot3D[{x1, y1, z1}, {t1, 0, 2 Pi}, {t2, 0, 3}];
>> pp2 = ParametricPlot3D[{x2, y2, z2}, {s1, 0, 2 Pi}, {s2, 0, 10}];
>>
>> we see that this curve also lies on both surfaces. So the problem 
>> seems
>> to have been solved.
>>
>>
>>
>>
>
>
>
> -- 
> DrBob at bigfoot.com
> www.eclecticdreams.net
>


  • Prev by Date: Re: Integrate in version 5.1
  • Next by Date: Re: Mathematica 5.0 on Mandrake 10.1?
  • Previous by thread: Re: Re: Intersection of two surfaces in 3D
  • Next by thread: Need your help to solve a PDE.