3
$\begingroup$

I have a little problem and didn't succeed trying to solve it on my own. Situation is, I need a visualization of the function $s - 3\cdot s\cdot q + q$ as a region on p == 0 if function's value is less than zero, a region on p == 1 if the function > 0, and a contour if the function equals to zero.

What I've done:

RegionPlot3D[(s - 3q*s + q > 0 && p == 0) || (s - 3q*s + q <= 0 && p == 1), {q, 0, 1}, {s, 0, 1}, {p, 0, 1}, AxesLabel -> Automatic] 

which give me this:

but what I need to add is a contour $s - 3\cdot s\cdot q + q = 0$ to this plot, but also remain able to intersect this set with others.

The contour is simple:

ContourPlot3D[s - 3 q*s + q == 0, {p, 0, 1}, {q, 0, 1}, {s, 0, 1}] 

I've tried to use a little hint with inequality range

RegionPlot3D[(s - 3 q s + q > 0 && p == 0) || (s - 3 q s + q <= 0 && p == 1) || Abs[s - 3 q s + q] < 0.01, {q, 0, 1}, {s, 0, 1}, {p, 0, 1}, AxesLabel -> Automatic, PlotPoint -> 100] 

This is sufficiently accurate, but produces a 3d set, instead of a surface.

Any ideas how to reach my goal?

P.S. the best would be a solution to such kind of problems in general, because, sometimes the contour equation can be not that simple.

$\endgroup$
0

2 Answers 2

5
$\begingroup$

Solution using Show needs to rearrange the order of ranges in ContourPlot3D, e.g. :

Show[RegionPlot3D[(s - 3 q*s + q > 0 && p == 0) || (s - 3 q*s + q <= 0 && p == 1), {q, 0, 1}, {s, 0, 1}, {p, 0, 1}, AxesLabel -> Automatic], ContourPlot3D[s - 3 q*s + q == 0, {q, 0, 1}, {s, 0, 1}, {p, 0, 1}]] 

enter image description here

Edit

Here is another solution without Show, using only Plot3D and HeavisideTheta function :

Plot3D[ HeavisideTheta[-s + 3 q*s - q], {q, 0, 1}, {s, 0, 1}, Exclusions -> None, PlotPoints -> 100, PerformanceGoal -> "Quality", ColorFunction -> Function[{x, y, z}, RGBColor[x, y, 1]], MeshFunctions -> {#1 &, #2 &, #3 &}, BoxRatios -> {1, 1, 2/3}] 

enter image description here

$\endgroup$
2
  • $\begingroup$ Hi, Artes! Thanks a lot for this answer, it's very helpful. Although, would I be able to intersect the contour part with other bool sets? I mean, what if I add another condition, using other equation, would it intersect the contour part with it ass well? $\endgroup$ Commented Mar 19, 2012 at 4:23
  • $\begingroup$ @SergeyAganezovjr You can always use Plot3D[{f1[x,y],f2[x,y],...,fn[x,y]},{x,xmin,xmax},{y,ymin,ymax},options] to plot n functions. Instead of HeavisideTheta you can use e.g. UnitStep. The latter may depend on more variables. $\endgroup$ Commented Mar 19, 2012 at 11:24
1
$\begingroup$

I am not sure I understand your question. What is a "3D set" and a "3D surface"?

If you need to combine two 3D graphics, use Show[graphic1, graphic2]. Your surface can be plotted using Plot3D as well, but the quality of the discontinuous part will not be excellent:

Plot3D[Boole[s - 3 q*s + q < 0], {q, 0, 1}, {s, 0, 1}, ExclusionsStyle -> Automatic, BoxRatios -> 1] 

Mathematica graphics

Using Show to combine two pieces:

Show[ ContourPlot3D[s - 3 q*s + q == 0, {q, 0.1, 1}, {s, 0.1, 1}, {p, 0, 1}], Plot3D[Boole[s - 3 q*s + q < 0], {q, 0, 1}, {s, 0, 1}] ] 

Mathematica graphics

$\endgroup$
2
  • $\begingroup$ Congrats with your 10k. I hadn't noticed before. $\endgroup$ Commented Mar 18, 2012 at 21:13
  • $\begingroup$ Well, the difference is that 3D set has a range of s values with constant q, while surface doesn't. $\endgroup$ Commented Mar 19, 2012 at 4:27

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.