Re: Adding markers on the surface of a Plot3D?
- To: mathgroup at smc.vnet.net
- Subject: [mg89356] Re: Adding markers on the surface of a Plot3D?
- From: "David Park" <djmpark at comcast.net>
- Date: Sat, 7 Jun 2008 02:57:03 -0400 (EDT)
- References: <g2b4o8$nm2$1@smc.vnet.net>
Here is a practice function.
f[x_, y_] := x^2 - 2 x y^2 + y^2
The following draws only two mesh lines at specific values. MeshStyle is
used to give a style to the lines.
Plot3D[f[x, y], {x, 0, 1}, {y, 0, 1},
PlotStyle -> ColorData["Legacy"]["DarkSeaGreen"],
Mesh -> {{.5}, {.5}},
MeshStyle -> Directive[Black, AbsoluteThickness[2]],
Lighting -> "Neutral"]
The following does the same thing, only now the style is embedded directly
with each mesh line.
Plot3D[f[x, y], {x, 0, 1}, {y, 0, 1},
PlotStyle -> ColorData["Legacy"]["DarkSeaGreen"],
Mesh ->
{{{.5, Directive[Black, AbsoluteThickness[2]]}}, {{.5,
Directive[Black, AbsoluteThickness[2]]}}},
Lighting -> "Neutral"]
The following draws a set of mesh lines in red and then draws two special
mesh lines in thick black.
Plot3D[f[x, y], {x, 0, 1}, {y, 0, 1},
PlotStyle -> ColorData["Legacy"]["DarkSeaGreen"],
Mesh ->
{{Sequence @@ Table[{x, Red}, {x, .1, .9, .1}], {.5,
Directive[Black, AbsoluteThickness[2]]}}, {Sequence @@
Table[{x, Red}, {x, .1, .9, .1}], {.5,
Directive[Black, AbsoluteThickness[2]]}}},
Lighting -> "Neutral"]
The following uses Presentations to draw the special lines as extra curves.
We can just combine all the various items in one Draw3DItems statement.
Needs["Presentations`Master`"]
Draw3DItems[
{Legacy@DarkSeaGreen,
Draw3D[f[x, y], {x, 0, 1}, {y, 0, 1}],
Black, AbsoluteThickness[2],
ParametricDraw3D[{.5, y, f[.5, y] + .01}, {y, 0, 1}],
ParametricDraw3D[{x, .5, f[x, .5] + .01}, {x, 0, 1}]},
NeutralLighting[.0, .5, .1],
Axes -> True,
BoxRatios -> {1, 1, 1/2},
ImageSize -> 350]
The following displays the special mesh lines dynamically using a Slider2D.
Manipulate[
Draw3DItems[
{Legacy@DarkSeaGreen,
Draw3D[f[x, y], {x, 0, 1}, {y, 0, 1}],
Black, AbsoluteThickness[1],
ParametricDraw3D[{First[u], y, f[First[u], y] + .02}, {y, 0, 1}],
ParametricDraw3D[{x, Last[u], f[x, Last[u]] + .02}, {x, 0, 1}]},
NeutralLighting[.0, .5, .1],
Axes -> True,
BoxRatios -> {1, 1, 1/2},
ImageSize -> 350],
{u, {0, 0}, {1, 1}}]
The following is a fancier presentation using a DynamicModule and a Grid
containing the Slider2D and digital readout. Dynamic coordination of
graphical and digital information is a wonderful method for exploring a
mathematical relation. It's really like having your cake and eating it too.
You can never get this on a dead static printed page.
DynamicModule[{u = {.5, .5}},
Column[{
(* Digital control and readout *)
Panel@Grid[{
{Item[Style["Dynamic Surface Marker", 16], Alignment -> Center],
SpanFromLeft},
{Slider2D[Dynamic[u]], {x, y} == Dynamic[u]},
{SpanFromAbove, HoldForm[f[x, y]] == Dynamic[f @@ u]}
},
ItemSize -> 10,
Alignment -> Left],
(* Graphics *)
Draw3DItems[
{Legacy@DarkSeaGreen,
Draw3D[f[x, y], {x, 0, 1}, {y, 0, 1}],
Orange,
Dynamic@Sphere[Flatten[{u, f @@ u}], .02]},
NeutralLighting[.0, .5, .1],
Axes -> True,
PlotRange -> {{0, 1}, {0, 1}, {0, 1}},
PlotRangePadding -> .05,
BoxRatios -> {1, 1, 1/2},
ImageSize -> 350]
}]
]
--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
"AES" <siegman at stanford.edu> wrote in message
news:g2b4o8$nm2$1 at smc.vnet.net...
> I'd like to highlight the two mesh lines that pass through a certain
> central point -- let's call it the point {xc,yc} -- on a Plot3D by
> thickening those two lines relative to the other mesh lines, or giving
> them a distinctive color, or . . .
>
> Or put a dot on the surface at the point {xc, yc, f[xc,yc]} to identify
> this location on the surface . . .
>
> Or run a vertical "post" up through that point using something like
> Line[{xc, yc, 0}, {xc, yc, 2*f[xc,yc]}}] (with the part of the post
> below the surface not being seen if you look at the surface from
> above) . . .
>
> I think I've so far tested and confirmed every possible way in which
> each of these tasks _can't_ be done . . .
>
> [And would someone want to help me understand _why_ the
> Show[ - - - - -] command (followed by a semicolon) no longer works, or
> can no longer be used, as one of a sequence of multiple expressions
> within a longer cell? And why it can't even have a semicolon following
> it as the last line in a cell? I just can't envision the logic of why
> this was a necessary (or optional?) interface design decision -- isn't
> Show[---] an expression?]
>