Find the 3D region containing the origin bounded by given planesUsing Mathematica to help to determine the consistency of and numerically solve systems of non-linear equationsHow to represent the lines that are formed by the intersection of two planes?Solving equations bounded by a regionRegion bounded by the curveFinding possible lattice planes of a crystal structureDrawing convex cone with given vectorsChanging the basis vectors of a 2D density plotFinding Intersections Between Arbitrary Surface and A LineGenerate convex-hull of a 15 dimensional spaceFind all integer tuples in a bounded region

Find the 3D region containing the origin bounded by given planes

Reference for electronegativities of different metal oxidation states

How to choose the correct exposure for flower photography?

Could a chemically propelled craft travel directly between Earth and Mars spaceports?

Can a problematic AL DM/organizer prevent me from running a separatate AL-legal game at the same store?

How does the "reverse syntax" in Middle English work?

Have the writers and actors of Game Of Thrones responded to its poor reception?

Germany rejected my entry to Schengen countries

What does it mean for a program to be 32 or 64 bit?

In How Many Ways Can We Partition a Set Into Smaller Subsets So The Sum of the Numbers In Each Subset Is Equal?

Does a windmilling propeller create more drag than a stopped propeller in an engine out scenario

Bash Read: Reading comma separated list, last element is missed

Can the bitcoin lightning network support more than 8 decimal places?

Precedent for disabled Kings

Chain rule instead of product rule

How come Arya Stark wasn't hurt by this in Game of Thrones Season 8 Episode 5?

Would it be possible to set up a franchise in the ancient world?

Is it wise to pay off mortgage with 401k?

Why is python script running in background consuming 100 % CPU?

Can I have a delimited macro with a literal # in the parameter text?

Very serious stuff - Salesforce bug enabled "Modify All"

Why are Marine Le Pen's possible connections with Steve Bannon something worth investigating?

Why favour the standard WP loop over iterating over (new WP_Query())->get_posts()?

Why does Taylor’s series “work”?



Find the 3D region containing the origin bounded by given planes


Using Mathematica to help to determine the consistency of and numerically solve systems of non-linear equationsHow to represent the lines that are formed by the intersection of two planes?Solving equations bounded by a regionRegion bounded by the curveFinding possible lattice planes of a crystal structureDrawing convex cone with given vectorsChanging the basis vectors of a 2D density plotFinding Intersections Between Arbitrary Surface and A LineGenerate convex-hull of a 15 dimensional spaceFind all integer tuples in a bounded region













1












$begingroup$


I'm writing a code to generate the Wigner-Seitz cell of the reciprocal lattice for a given set of lattice translation vectors. For example, consider the Body Centered Cubic (BCC) lattice whose basis translation vectors are given by



a1 = -1, 1, 1/2;
a2 = 1, -1, 1/2;
a3 = 1, 1, -1/2;


The reciprocal basis vectors are then defined according to



d = 2 Pi;
v = a1.(a2[Cross]a3);
b1 = d/v (a2[Cross]a3);
b2 = d/v (a3[Cross]a1);
b3 = d/v (a1[Cross]a2);


The reciprocal lattice is then defined by the set of reciprocal lattice vectors, the set of all linear combinations of integer multiples of reciprocal basis vectors, i.e.



$$vecG = n_1 vecb_1 + n_2 vecb_2 + n_3 vecb_3, qquad n_i in mathbbZ$$



The Wigner-Seitz cell (in this case the First Brillouin Zone) is defined as the region containing the origin which is bounded by the perpendicular bisecting planes of the reciprocal lattice vectors. We generally can accomplish this by only considering the first, second, and maybe third closest reciprocal lattice points to the origin. In the case of BCC, for example, the following vectors will suffice:



recipvecs = 
Select[Flatten[
Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2],
Norm[#] <= 2 d &];


Question: Given these vectors, how can I construct the Wigner-Seitz cell?



For example, one possibility is to construct the equations for all the planes



planes = (x, y, z - (#/2)).# == 0 & /@ reciplattice


(note there is a redundancy for the origin, which just gives True, this can be removed). Now the issue is going to be to rewrite each of these equations as an inequality such that the half-space defined by the inequality contains the origin. I don't think that would be too difficult, but not every one of the equations can be solved for any one of the coordinates, e.g. we cannot solve every equation for $z$, like



Solve[#, z] & /@ planes


Some of the equations will have to be solved for $x$ or $y$ before being turned into inequalities. I think I could find a brute force solution but I'm hoping there's something more elegant.



Ultimately I'd like to obtain the inequalities that define the region so that I can visualize it with RegionPlot3D and use it to Select points from a mesh.










share|improve this question











$endgroup$
















    1












    $begingroup$


    I'm writing a code to generate the Wigner-Seitz cell of the reciprocal lattice for a given set of lattice translation vectors. For example, consider the Body Centered Cubic (BCC) lattice whose basis translation vectors are given by



    a1 = -1, 1, 1/2;
    a2 = 1, -1, 1/2;
    a3 = 1, 1, -1/2;


    The reciprocal basis vectors are then defined according to



    d = 2 Pi;
    v = a1.(a2[Cross]a3);
    b1 = d/v (a2[Cross]a3);
    b2 = d/v (a3[Cross]a1);
    b3 = d/v (a1[Cross]a2);


    The reciprocal lattice is then defined by the set of reciprocal lattice vectors, the set of all linear combinations of integer multiples of reciprocal basis vectors, i.e.



    $$vecG = n_1 vecb_1 + n_2 vecb_2 + n_3 vecb_3, qquad n_i in mathbbZ$$



    The Wigner-Seitz cell (in this case the First Brillouin Zone) is defined as the region containing the origin which is bounded by the perpendicular bisecting planes of the reciprocal lattice vectors. We generally can accomplish this by only considering the first, second, and maybe third closest reciprocal lattice points to the origin. In the case of BCC, for example, the following vectors will suffice:



    recipvecs = 
    Select[Flatten[
    Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2],
    Norm[#] <= 2 d &];


    Question: Given these vectors, how can I construct the Wigner-Seitz cell?



    For example, one possibility is to construct the equations for all the planes



    planes = (x, y, z - (#/2)).# == 0 & /@ reciplattice


    (note there is a redundancy for the origin, which just gives True, this can be removed). Now the issue is going to be to rewrite each of these equations as an inequality such that the half-space defined by the inequality contains the origin. I don't think that would be too difficult, but not every one of the equations can be solved for any one of the coordinates, e.g. we cannot solve every equation for $z$, like



    Solve[#, z] & /@ planes


    Some of the equations will have to be solved for $x$ or $y$ before being turned into inequalities. I think I could find a brute force solution but I'm hoping there's something more elegant.



    Ultimately I'd like to obtain the inequalities that define the region so that I can visualize it with RegionPlot3D and use it to Select points from a mesh.










    share|improve this question











    $endgroup$














      1












      1








      1





      $begingroup$


      I'm writing a code to generate the Wigner-Seitz cell of the reciprocal lattice for a given set of lattice translation vectors. For example, consider the Body Centered Cubic (BCC) lattice whose basis translation vectors are given by



      a1 = -1, 1, 1/2;
      a2 = 1, -1, 1/2;
      a3 = 1, 1, -1/2;


      The reciprocal basis vectors are then defined according to



      d = 2 Pi;
      v = a1.(a2[Cross]a3);
      b1 = d/v (a2[Cross]a3);
      b2 = d/v (a3[Cross]a1);
      b3 = d/v (a1[Cross]a2);


      The reciprocal lattice is then defined by the set of reciprocal lattice vectors, the set of all linear combinations of integer multiples of reciprocal basis vectors, i.e.



      $$vecG = n_1 vecb_1 + n_2 vecb_2 + n_3 vecb_3, qquad n_i in mathbbZ$$



      The Wigner-Seitz cell (in this case the First Brillouin Zone) is defined as the region containing the origin which is bounded by the perpendicular bisecting planes of the reciprocal lattice vectors. We generally can accomplish this by only considering the first, second, and maybe third closest reciprocal lattice points to the origin. In the case of BCC, for example, the following vectors will suffice:



      recipvecs = 
      Select[Flatten[
      Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2],
      Norm[#] <= 2 d &];


      Question: Given these vectors, how can I construct the Wigner-Seitz cell?



      For example, one possibility is to construct the equations for all the planes



      planes = (x, y, z - (#/2)).# == 0 & /@ reciplattice


      (note there is a redundancy for the origin, which just gives True, this can be removed). Now the issue is going to be to rewrite each of these equations as an inequality such that the half-space defined by the inequality contains the origin. I don't think that would be too difficult, but not every one of the equations can be solved for any one of the coordinates, e.g. we cannot solve every equation for $z$, like



      Solve[#, z] & /@ planes


      Some of the equations will have to be solved for $x$ or $y$ before being turned into inequalities. I think I could find a brute force solution but I'm hoping there's something more elegant.



      Ultimately I'd like to obtain the inequalities that define the region so that I can visualize it with RegionPlot3D and use it to Select points from a mesh.










      share|improve this question











      $endgroup$




      I'm writing a code to generate the Wigner-Seitz cell of the reciprocal lattice for a given set of lattice translation vectors. For example, consider the Body Centered Cubic (BCC) lattice whose basis translation vectors are given by



      a1 = -1, 1, 1/2;
      a2 = 1, -1, 1/2;
      a3 = 1, 1, -1/2;


      The reciprocal basis vectors are then defined according to



      d = 2 Pi;
      v = a1.(a2[Cross]a3);
      b1 = d/v (a2[Cross]a3);
      b2 = d/v (a3[Cross]a1);
      b3 = d/v (a1[Cross]a2);


      The reciprocal lattice is then defined by the set of reciprocal lattice vectors, the set of all linear combinations of integer multiples of reciprocal basis vectors, i.e.



      $$vecG = n_1 vecb_1 + n_2 vecb_2 + n_3 vecb_3, qquad n_i in mathbbZ$$



      The Wigner-Seitz cell (in this case the First Brillouin Zone) is defined as the region containing the origin which is bounded by the perpendicular bisecting planes of the reciprocal lattice vectors. We generally can accomplish this by only considering the first, second, and maybe third closest reciprocal lattice points to the origin. In the case of BCC, for example, the following vectors will suffice:



      recipvecs = 
      Select[Flatten[
      Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2],
      Norm[#] <= 2 d &];


      Question: Given these vectors, how can I construct the Wigner-Seitz cell?



      For example, one possibility is to construct the equations for all the planes



      planes = (x, y, z - (#/2)).# == 0 & /@ reciplattice


      (note there is a redundancy for the origin, which just gives True, this can be removed). Now the issue is going to be to rewrite each of these equations as an inequality such that the half-space defined by the inequality contains the origin. I don't think that would be too difficult, but not every one of the equations can be solved for any one of the coordinates, e.g. we cannot solve every equation for $z$, like



      Solve[#, z] & /@ planes


      Some of the equations will have to be solved for $x$ or $y$ before being turned into inequalities. I think I could find a brute force solution but I'm hoping there's something more elegant.



      Ultimately I'd like to obtain the inequalities that define the region so that I can visualize it with RegionPlot3D and use it to Select points from a mesh.







      list-manipulation equation-solving graphics programming






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 2 hours ago







      Kai

















      asked 5 hours ago









      KaiKai

      55719




      55719




















          3 Answers
          3






          active

          oldest

          votes


















          3












          $begingroup$

          Unfortunately, VoronoiMesh does not work in 3D. So we do it manually.



          the crystal lattice vectors:



          a1 = -1, 1, 1/2;
          a2 = 1, -1, 1/2;
          a3 = 1, 1, -1/2;


          the reciprocal lattice vectors: (Inverse is easier than using cross products, but ultimately the same thing)



          B = b1, b2, b3 = 2π*Inverse[Transpose[a1, a2, a3]];


          an inequality defining the perpendicular bisecting plane of a reciprocal lattice point v:



          pbp[0, 0, 0, r_] = True;
          pbp[v_, r_] := v.r/v.v <= 1/2


          make a list of such inequalities, And them, and simplify: (here you may have to go to larger s to get all the constraints, as you said)



          With[s = 1,
          WS[x_, y_, z_] = FullSimplify[
          And @@ Flatten[Table[pbp[n1,n2,n3.B, x,y,z], n1,-s,s, n2,-s,s, n3,-s,s]]]]



          -2 π <= y + z <= 2 π && z <= 2 π + x && x <= 2 π + z && y <= 2 π + x && x <= 2 π + y && -2 π <= x + z <= 2 π && z <= 2 π + y && y <= 2 π + z && -2 π <= x + y <= 2 π




          make a 3D plot of the Wigner-Seitz cell: (use more PlotPoints to make it prettier)



          With[t = 2π,
          RegionPlot3D[WS[x, y, z], x, -t, t, y, -t, t, z, -t, t]]


          enter image description here



          You can also check if a point is in the Wigner-Seitz cell or not:



          WS[0.1, 0.2, 0.3]
          (* True *)
          WS[3.1, 3.2, 0.3]
          (* False *)





          share|improve this answer











          $endgroup$




















            2












            $begingroup$

            It is really unfortunate that we don't have a 3D implementation of VoronoiMesh.



            Borrowing quite a lot from Roman, the following tries to compute the extremal points of the Wigner-Seitz cells and applies ConvexHullMesh to the result in order to obtain the precise polyhedron.



            a1 = -1, 1, 1/2;
            a2 = 1, -1, 1/2;
            a3 = 1, 1, -1/2;
            B = b1, b2, b3 = 2 π*Inverse[Transpose[a1, a2, a3]];
            pts = Flatten[Table[b1, b2, b3.n1, n2, n3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2];
            G = NearestNeighborGraph[pts, VertexCoordinates -> pts];
            neighbors = Rest[VertexOutComponent[G, 0, 0, 0, 1]];
            rhs = MapThread[Dot, neighbors, neighbors]/2;
            subsets = Subsets[Range[Length[neighbors]], 3];

            q = Module[A, x,
            Table[
            A = neighbors[[s]];
            If[Det[A] != 0,
            x = LinearSolve[A, rhs[[s]]];
            If[And @@ Thread[neighbors.x <= rhs], x, Nothing],
            Nothing
            ],
            s, subsets]
            ];
            R = ConvexHullMesh[q]


            enter image description here






            share|improve this answer









            $endgroup$




















              1












              $begingroup$

              The other answers are great and very enlightening, I had already found a brute force solution but I took elements of both @Henrik Schumacher and @Roman's answers to produce this nice minimal one for what I wanted. I think both of their answers are better in that they provide more functionality.



              d = 2 Pi;
              a1 = -1, 1, 1/2;
              a2 = 1, -1, 1/2;
              a3 = 1, 1, -1/2;
              b1, b2, b3 = d*Inverse[Transpose[a1, a2, a3]];
              reciplattice =
              Select[Flatten[
              Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1],
              2], 0 < Norm[#] <= 2 d &];
              region = And@@FullSimplify[(x, y, z - (#/2)).# <= 0 & /@ reciplattice]


              And plotting it with



              e = d + 0.1;
              fbz = RegionPlot3D[region, x, -e, e, y, -e, e, z, -e, e,
              PlotPoints -> 60]


              enter image description here






              share|improve this answer









              $endgroup$













                Your Answer








                StackExchange.ready(function()
                var channelOptions =
                tags: "".split(" "),
                id: "387"
                ;
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function()
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled)
                StackExchange.using("snippets", function()
                createEditor();
                );

                else
                createEditor();

                );

                function createEditor()
                StackExchange.prepareEditor(
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: false,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: null,
                bindNavPrevention: true,
                postfix: "",
                imageUploader:
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                ,
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                );



                );













                draft saved

                draft discarded


















                StackExchange.ready(
                function ()
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f198588%2ffind-the-3d-region-containing-the-origin-bounded-by-given-planes%23new-answer', 'question_page');

                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                3












                $begingroup$

                Unfortunately, VoronoiMesh does not work in 3D. So we do it manually.



                the crystal lattice vectors:



                a1 = -1, 1, 1/2;
                a2 = 1, -1, 1/2;
                a3 = 1, 1, -1/2;


                the reciprocal lattice vectors: (Inverse is easier than using cross products, but ultimately the same thing)



                B = b1, b2, b3 = 2π*Inverse[Transpose[a1, a2, a3]];


                an inequality defining the perpendicular bisecting plane of a reciprocal lattice point v:



                pbp[0, 0, 0, r_] = True;
                pbp[v_, r_] := v.r/v.v <= 1/2


                make a list of such inequalities, And them, and simplify: (here you may have to go to larger s to get all the constraints, as you said)



                With[s = 1,
                WS[x_, y_, z_] = FullSimplify[
                And @@ Flatten[Table[pbp[n1,n2,n3.B, x,y,z], n1,-s,s, n2,-s,s, n3,-s,s]]]]



                -2 π <= y + z <= 2 π && z <= 2 π + x && x <= 2 π + z && y <= 2 π + x && x <= 2 π + y && -2 π <= x + z <= 2 π && z <= 2 π + y && y <= 2 π + z && -2 π <= x + y <= 2 π




                make a 3D plot of the Wigner-Seitz cell: (use more PlotPoints to make it prettier)



                With[t = 2π,
                RegionPlot3D[WS[x, y, z], x, -t, t, y, -t, t, z, -t, t]]


                enter image description here



                You can also check if a point is in the Wigner-Seitz cell or not:



                WS[0.1, 0.2, 0.3]
                (* True *)
                WS[3.1, 3.2, 0.3]
                (* False *)





                share|improve this answer











                $endgroup$

















                  3












                  $begingroup$

                  Unfortunately, VoronoiMesh does not work in 3D. So we do it manually.



                  the crystal lattice vectors:



                  a1 = -1, 1, 1/2;
                  a2 = 1, -1, 1/2;
                  a3 = 1, 1, -1/2;


                  the reciprocal lattice vectors: (Inverse is easier than using cross products, but ultimately the same thing)



                  B = b1, b2, b3 = 2π*Inverse[Transpose[a1, a2, a3]];


                  an inequality defining the perpendicular bisecting plane of a reciprocal lattice point v:



                  pbp[0, 0, 0, r_] = True;
                  pbp[v_, r_] := v.r/v.v <= 1/2


                  make a list of such inequalities, And them, and simplify: (here you may have to go to larger s to get all the constraints, as you said)



                  With[s = 1,
                  WS[x_, y_, z_] = FullSimplify[
                  And @@ Flatten[Table[pbp[n1,n2,n3.B, x,y,z], n1,-s,s, n2,-s,s, n3,-s,s]]]]



                  -2 π <= y + z <= 2 π && z <= 2 π + x && x <= 2 π + z && y <= 2 π + x && x <= 2 π + y && -2 π <= x + z <= 2 π && z <= 2 π + y && y <= 2 π + z && -2 π <= x + y <= 2 π




                  make a 3D plot of the Wigner-Seitz cell: (use more PlotPoints to make it prettier)



                  With[t = 2π,
                  RegionPlot3D[WS[x, y, z], x, -t, t, y, -t, t, z, -t, t]]


                  enter image description here



                  You can also check if a point is in the Wigner-Seitz cell or not:



                  WS[0.1, 0.2, 0.3]
                  (* True *)
                  WS[3.1, 3.2, 0.3]
                  (* False *)





                  share|improve this answer











                  $endgroup$















                    3












                    3








                    3





                    $begingroup$

                    Unfortunately, VoronoiMesh does not work in 3D. So we do it manually.



                    the crystal lattice vectors:



                    a1 = -1, 1, 1/2;
                    a2 = 1, -1, 1/2;
                    a3 = 1, 1, -1/2;


                    the reciprocal lattice vectors: (Inverse is easier than using cross products, but ultimately the same thing)



                    B = b1, b2, b3 = 2π*Inverse[Transpose[a1, a2, a3]];


                    an inequality defining the perpendicular bisecting plane of a reciprocal lattice point v:



                    pbp[0, 0, 0, r_] = True;
                    pbp[v_, r_] := v.r/v.v <= 1/2


                    make a list of such inequalities, And them, and simplify: (here you may have to go to larger s to get all the constraints, as you said)



                    With[s = 1,
                    WS[x_, y_, z_] = FullSimplify[
                    And @@ Flatten[Table[pbp[n1,n2,n3.B, x,y,z], n1,-s,s, n2,-s,s, n3,-s,s]]]]



                    -2 π <= y + z <= 2 π && z <= 2 π + x && x <= 2 π + z && y <= 2 π + x && x <= 2 π + y && -2 π <= x + z <= 2 π && z <= 2 π + y && y <= 2 π + z && -2 π <= x + y <= 2 π




                    make a 3D plot of the Wigner-Seitz cell: (use more PlotPoints to make it prettier)



                    With[t = 2π,
                    RegionPlot3D[WS[x, y, z], x, -t, t, y, -t, t, z, -t, t]]


                    enter image description here



                    You can also check if a point is in the Wigner-Seitz cell or not:



                    WS[0.1, 0.2, 0.3]
                    (* True *)
                    WS[3.1, 3.2, 0.3]
                    (* False *)





                    share|improve this answer











                    $endgroup$



                    Unfortunately, VoronoiMesh does not work in 3D. So we do it manually.



                    the crystal lattice vectors:



                    a1 = -1, 1, 1/2;
                    a2 = 1, -1, 1/2;
                    a3 = 1, 1, -1/2;


                    the reciprocal lattice vectors: (Inverse is easier than using cross products, but ultimately the same thing)



                    B = b1, b2, b3 = 2π*Inverse[Transpose[a1, a2, a3]];


                    an inequality defining the perpendicular bisecting plane of a reciprocal lattice point v:



                    pbp[0, 0, 0, r_] = True;
                    pbp[v_, r_] := v.r/v.v <= 1/2


                    make a list of such inequalities, And them, and simplify: (here you may have to go to larger s to get all the constraints, as you said)



                    With[s = 1,
                    WS[x_, y_, z_] = FullSimplify[
                    And @@ Flatten[Table[pbp[n1,n2,n3.B, x,y,z], n1,-s,s, n2,-s,s, n3,-s,s]]]]



                    -2 π <= y + z <= 2 π && z <= 2 π + x && x <= 2 π + z && y <= 2 π + x && x <= 2 π + y && -2 π <= x + z <= 2 π && z <= 2 π + y && y <= 2 π + z && -2 π <= x + y <= 2 π




                    make a 3D plot of the Wigner-Seitz cell: (use more PlotPoints to make it prettier)



                    With[t = 2π,
                    RegionPlot3D[WS[x, y, z], x, -t, t, y, -t, t, z, -t, t]]


                    enter image description here



                    You can also check if a point is in the Wigner-Seitz cell or not:



                    WS[0.1, 0.2, 0.3]
                    (* True *)
                    WS[3.1, 3.2, 0.3]
                    (* False *)






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 4 hours ago

























                    answered 4 hours ago









                    RomanRoman

                    8,53511238




                    8,53511238





















                        2












                        $begingroup$

                        It is really unfortunate that we don't have a 3D implementation of VoronoiMesh.



                        Borrowing quite a lot from Roman, the following tries to compute the extremal points of the Wigner-Seitz cells and applies ConvexHullMesh to the result in order to obtain the precise polyhedron.



                        a1 = -1, 1, 1/2;
                        a2 = 1, -1, 1/2;
                        a3 = 1, 1, -1/2;
                        B = b1, b2, b3 = 2 π*Inverse[Transpose[a1, a2, a3]];
                        pts = Flatten[Table[b1, b2, b3.n1, n2, n3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2];
                        G = NearestNeighborGraph[pts, VertexCoordinates -> pts];
                        neighbors = Rest[VertexOutComponent[G, 0, 0, 0, 1]];
                        rhs = MapThread[Dot, neighbors, neighbors]/2;
                        subsets = Subsets[Range[Length[neighbors]], 3];

                        q = Module[A, x,
                        Table[
                        A = neighbors[[s]];
                        If[Det[A] != 0,
                        x = LinearSolve[A, rhs[[s]]];
                        If[And @@ Thread[neighbors.x <= rhs], x, Nothing],
                        Nothing
                        ],
                        s, subsets]
                        ];
                        R = ConvexHullMesh[q]


                        enter image description here






                        share|improve this answer









                        $endgroup$

















                          2












                          $begingroup$

                          It is really unfortunate that we don't have a 3D implementation of VoronoiMesh.



                          Borrowing quite a lot from Roman, the following tries to compute the extremal points of the Wigner-Seitz cells and applies ConvexHullMesh to the result in order to obtain the precise polyhedron.



                          a1 = -1, 1, 1/2;
                          a2 = 1, -1, 1/2;
                          a3 = 1, 1, -1/2;
                          B = b1, b2, b3 = 2 π*Inverse[Transpose[a1, a2, a3]];
                          pts = Flatten[Table[b1, b2, b3.n1, n2, n3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2];
                          G = NearestNeighborGraph[pts, VertexCoordinates -> pts];
                          neighbors = Rest[VertexOutComponent[G, 0, 0, 0, 1]];
                          rhs = MapThread[Dot, neighbors, neighbors]/2;
                          subsets = Subsets[Range[Length[neighbors]], 3];

                          q = Module[A, x,
                          Table[
                          A = neighbors[[s]];
                          If[Det[A] != 0,
                          x = LinearSolve[A, rhs[[s]]];
                          If[And @@ Thread[neighbors.x <= rhs], x, Nothing],
                          Nothing
                          ],
                          s, subsets]
                          ];
                          R = ConvexHullMesh[q]


                          enter image description here






                          share|improve this answer









                          $endgroup$















                            2












                            2








                            2





                            $begingroup$

                            It is really unfortunate that we don't have a 3D implementation of VoronoiMesh.



                            Borrowing quite a lot from Roman, the following tries to compute the extremal points of the Wigner-Seitz cells and applies ConvexHullMesh to the result in order to obtain the precise polyhedron.



                            a1 = -1, 1, 1/2;
                            a2 = 1, -1, 1/2;
                            a3 = 1, 1, -1/2;
                            B = b1, b2, b3 = 2 π*Inverse[Transpose[a1, a2, a3]];
                            pts = Flatten[Table[b1, b2, b3.n1, n2, n3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2];
                            G = NearestNeighborGraph[pts, VertexCoordinates -> pts];
                            neighbors = Rest[VertexOutComponent[G, 0, 0, 0, 1]];
                            rhs = MapThread[Dot, neighbors, neighbors]/2;
                            subsets = Subsets[Range[Length[neighbors]], 3];

                            q = Module[A, x,
                            Table[
                            A = neighbors[[s]];
                            If[Det[A] != 0,
                            x = LinearSolve[A, rhs[[s]]];
                            If[And @@ Thread[neighbors.x <= rhs], x, Nothing],
                            Nothing
                            ],
                            s, subsets]
                            ];
                            R = ConvexHullMesh[q]


                            enter image description here






                            share|improve this answer









                            $endgroup$



                            It is really unfortunate that we don't have a 3D implementation of VoronoiMesh.



                            Borrowing quite a lot from Roman, the following tries to compute the extremal points of the Wigner-Seitz cells and applies ConvexHullMesh to the result in order to obtain the precise polyhedron.



                            a1 = -1, 1, 1/2;
                            a2 = 1, -1, 1/2;
                            a3 = 1, 1, -1/2;
                            B = b1, b2, b3 = 2 π*Inverse[Transpose[a1, a2, a3]];
                            pts = Flatten[Table[b1, b2, b3.n1, n2, n3, n1, -1, 1, n2, -1, 1, n3, -1, 1], 2];
                            G = NearestNeighborGraph[pts, VertexCoordinates -> pts];
                            neighbors = Rest[VertexOutComponent[G, 0, 0, 0, 1]];
                            rhs = MapThread[Dot, neighbors, neighbors]/2;
                            subsets = Subsets[Range[Length[neighbors]], 3];

                            q = Module[A, x,
                            Table[
                            A = neighbors[[s]];
                            If[Det[A] != 0,
                            x = LinearSolve[A, rhs[[s]]];
                            If[And @@ Thread[neighbors.x <= rhs], x, Nothing],
                            Nothing
                            ],
                            s, subsets]
                            ];
                            R = ConvexHullMesh[q]


                            enter image description here







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 3 hours ago









                            Henrik SchumacherHenrik Schumacher

                            62.5k586175




                            62.5k586175





















                                1












                                $begingroup$

                                The other answers are great and very enlightening, I had already found a brute force solution but I took elements of both @Henrik Schumacher and @Roman's answers to produce this nice minimal one for what I wanted. I think both of their answers are better in that they provide more functionality.



                                d = 2 Pi;
                                a1 = -1, 1, 1/2;
                                a2 = 1, -1, 1/2;
                                a3 = 1, 1, -1/2;
                                b1, b2, b3 = d*Inverse[Transpose[a1, a2, a3]];
                                reciplattice =
                                Select[Flatten[
                                Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1],
                                2], 0 < Norm[#] <= 2 d &];
                                region = And@@FullSimplify[(x, y, z - (#/2)).# <= 0 & /@ reciplattice]


                                And plotting it with



                                e = d + 0.1;
                                fbz = RegionPlot3D[region, x, -e, e, y, -e, e, z, -e, e,
                                PlotPoints -> 60]


                                enter image description here






                                share|improve this answer









                                $endgroup$

















                                  1












                                  $begingroup$

                                  The other answers are great and very enlightening, I had already found a brute force solution but I took elements of both @Henrik Schumacher and @Roman's answers to produce this nice minimal one for what I wanted. I think both of their answers are better in that they provide more functionality.



                                  d = 2 Pi;
                                  a1 = -1, 1, 1/2;
                                  a2 = 1, -1, 1/2;
                                  a3 = 1, 1, -1/2;
                                  b1, b2, b3 = d*Inverse[Transpose[a1, a2, a3]];
                                  reciplattice =
                                  Select[Flatten[
                                  Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1],
                                  2], 0 < Norm[#] <= 2 d &];
                                  region = And@@FullSimplify[(x, y, z - (#/2)).# <= 0 & /@ reciplattice]


                                  And plotting it with



                                  e = d + 0.1;
                                  fbz = RegionPlot3D[region, x, -e, e, y, -e, e, z, -e, e,
                                  PlotPoints -> 60]


                                  enter image description here






                                  share|improve this answer









                                  $endgroup$















                                    1












                                    1








                                    1





                                    $begingroup$

                                    The other answers are great and very enlightening, I had already found a brute force solution but I took elements of both @Henrik Schumacher and @Roman's answers to produce this nice minimal one for what I wanted. I think both of their answers are better in that they provide more functionality.



                                    d = 2 Pi;
                                    a1 = -1, 1, 1/2;
                                    a2 = 1, -1, 1/2;
                                    a3 = 1, 1, -1/2;
                                    b1, b2, b3 = d*Inverse[Transpose[a1, a2, a3]];
                                    reciplattice =
                                    Select[Flatten[
                                    Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1],
                                    2], 0 < Norm[#] <= 2 d &];
                                    region = And@@FullSimplify[(x, y, z - (#/2)).# <= 0 & /@ reciplattice]


                                    And plotting it with



                                    e = d + 0.1;
                                    fbz = RegionPlot3D[region, x, -e, e, y, -e, e, z, -e, e,
                                    PlotPoints -> 60]


                                    enter image description here






                                    share|improve this answer









                                    $endgroup$



                                    The other answers are great and very enlightening, I had already found a brute force solution but I took elements of both @Henrik Schumacher and @Roman's answers to produce this nice minimal one for what I wanted. I think both of their answers are better in that they provide more functionality.



                                    d = 2 Pi;
                                    a1 = -1, 1, 1/2;
                                    a2 = 1, -1, 1/2;
                                    a3 = 1, 1, -1/2;
                                    b1, b2, b3 = d*Inverse[Transpose[a1, a2, a3]];
                                    reciplattice =
                                    Select[Flatten[
                                    Table[n1 b1 + n2 b2 + n3 b3, n1, -1, 1, n2, -1, 1, n3, -1, 1],
                                    2], 0 < Norm[#] <= 2 d &];
                                    region = And@@FullSimplify[(x, y, z - (#/2)).# <= 0 & /@ reciplattice]


                                    And plotting it with



                                    e = d + 0.1;
                                    fbz = RegionPlot3D[region, x, -e, e, y, -e, e, z, -e, e,
                                    PlotPoints -> 60]


                                    enter image description here







                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered 3 hours ago









                                    KaiKai

                                    55719




                                    55719



























                                        draft saved

                                        draft discarded
















































                                        Thanks for contributing an answer to Mathematica Stack Exchange!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid


                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.

                                        Use MathJax to format equations. MathJax reference.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function ()
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f198588%2ffind-the-3d-region-containing-the-origin-bounded-by-given-planes%23new-answer', 'question_page');

                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу

                                        Israel Cuprins Etimologie | Istorie | Geografie | Politică | Demografie | Educație | Economie | Cultură | Note explicative | Note bibliografice | Bibliografie | Legături externe | Meniu de navigaresite web oficialfacebooktweeterGoogle+Instagramcanal YouTubeInstagramtextmodificaremodificarewww.technion.ac.ilnew.huji.ac.ilwww.weizmann.ac.ilwww1.biu.ac.ilenglish.tau.ac.ilwww.haifa.ac.ilin.bgu.ac.ilwww.openu.ac.ilwww.ariel.ac.ilCIA FactbookHarta Israelului"Negotiating Jerusalem," Palestine–Israel JournalThe Schizoid Nature of Modern Hebrew: A Slavic Language in Search of a Semitic Past„Arabic in Israel: an official language and a cultural bridge”„Latest Population Statistics for Israel”„Israel Population”„Tables”„Report for Selected Countries and Subjects”Human Development Report 2016: Human Development for Everyone„Distribution of family income - Gini index”The World FactbookJerusalem Law„Israel”„Israel”„Zionist Leaders: David Ben-Gurion 1886–1973”„The status of Jerusalem”„Analysis: Kadima's big plans”„Israel's Hard-Learned Lessons”„The Legacy of Undefined Borders, Tel Aviv Notes No. 40, 5 iunie 2002”„Israel Journal: A Land Without Borders”„Population”„Israel closes decade with population of 7.5 million”Time Series-DataBank„Selected Statistics on Jerusalem Day 2007 (Hebrew)”Golan belongs to Syria, Druze protestGlobal Survey 2006: Middle East Progress Amid Global Gains in FreedomWHO: Life expectancy in Israel among highest in the worldInternational Monetary Fund, World Economic Outlook Database, April 2011: Nominal GDP list of countries. Data for the year 2010.„Israel's accession to the OECD”Popular Opinion„On the Move”Hosea 12:5„Walking the Bible Timeline”„Palestine: History”„Return to Zion”An invention called 'the Jewish people' – Haaretz – Israel NewsoriginalJewish and Non-Jewish Population of Palestine-Israel (1517–2004)ImmigrationJewishvirtuallibrary.orgChapter One: The Heralders of Zionism„The birth of modern Israel: A scrap of paper that changed history”„League of Nations: The Mandate for Palestine, 24 iulie 1922”The Population of Palestine Prior to 1948originalBackground Paper No. 47 (ST/DPI/SER.A/47)History: Foreign DominationTwo Hundred and Seventh Plenary Meeting„Israel (Labor Zionism)”Population, by Religion and Population GroupThe Suez CrisisAdolf EichmannJustice Ministry Reply to Amnesty International Report„The Interregnum”Israel Ministry of Foreign Affairs – The Palestinian National Covenant- July 1968Research on terrorism: trends, achievements & failuresThe Routledge Atlas of the Arab–Israeli conflict: The Complete History of the Struggle and the Efforts to Resolve It"George Habash, Palestinian Terrorism Tactician, Dies at 82."„1973: Arab states attack Israeli forces”Agranat Commission„Has Israel Annexed East Jerusalem?”original„After 4 Years, Intifada Still Smolders”From the End of the Cold War to 2001originalThe Oslo Accords, 1993Israel-PLO Recognition – Exchange of Letters between PM Rabin and Chairman Arafat – Sept 9- 1993Foundation for Middle East PeaceSources of Population Growth: Total Israeli Population and Settler Population, 1991–2003original„Israel marks Rabin assassination”The Wye River Memorandumoriginal„West Bank barrier route disputed, Israeli missile kills 2”"Permanent Ceasefire to Be Based on Creation Of Buffer Zone Free of Armed Personnel Other than UN, Lebanese Forces"„Hezbollah kills 8 soldiers, kidnaps two in offensive on northern border”„Olmert confirms peace talks with Syria”„Battleground Gaza: Israeli ground forces invade the strip”„IDF begins Gaza troop withdrawal, hours after ending 3-week offensive”„THE LAND: Geography and Climate”„Area of districts, sub-districts, natural regions and lakes”„Israel - Geography”„Makhteshim Country”Israel and the Palestinian Territories„Makhtesh Ramon”„The Living Dead Sea”„Temperatures reach record high in Pakistan”„Climate Extremes In Israel”Israel in figures„Deuteronom”„JNF: 240 million trees planted since 1901”„Vegetation of Israel and Neighboring Countries”Environmental Law in Israel„Executive branch”„Israel's election process explained”„The Electoral System in Israel”„Constitution for Israel”„All 120 incoming Knesset members”„Statul ISRAEL”„The Judiciary: The Court System”„Israel's high court unique in region”„Israel and the International Criminal Court: A Legal Battlefield”„Localities and population, by population group, district, sub-district and natural region”„Israel: Districts, Major Cities, Urban Localities & Metropolitan Areas”„Israel-Egypt Relations: Background & Overview of Peace Treaty”„Solana to Haaretz: New Rules of War Needed for Age of Terror”„Israel's Announcement Regarding Settlements”„United Nations Security Council Resolution 497”„Security Council resolution 478 (1980) on the status of Jerusalem”„Arabs will ask U.N. to seek razing of Israeli wall”„Olmert: Willing to trade land for peace”„Mapping Peace between Syria and Israel”„Egypt: Israel must accept the land-for-peace formula”„Israel: Age structure from 2005 to 2015”„Global, regional, and national disability-adjusted life years (DALYs) for 306 diseases and injuries and healthy life expectancy (HALE) for 188 countries, 1990–2013: quantifying the epidemiological transition”10.1016/S0140-6736(15)61340-X„World Health Statistics 2014”„Life expectancy for Israeli men world's 4th highest”„Family Structure and Well-Being Across Israel's Diverse Population”„Fertility among Jewish and Muslim Women in Israel, by Level of Religiosity, 1979-2009”„Israel leaders in birth rate, but poverty major challenge”„Ethnic Groups”„Israel's population: Over 8.5 million”„Israel - Ethnic groups”„Jews, by country of origin and age”„Minority Communities in Israel: Background & Overview”„Israel”„Language in Israel”„Selected Data from the 2011 Social Survey on Mastery of the Hebrew Language and Usage of Languages”„Religions”„5 facts about Israeli Druze, a unique religious and ethnic group”„Israël”Israel Country Study Guide„Haredi city in Negev – blessing or curse?”„New town Harish harbors hopes of being more than another Pleasantville”„List of localities, in alphabetical order”„Muncitorii români, doriți în Israel”„Prietenia româno-israeliană la nevoie se cunoaște”„The Higher Education System in Israel”„Middle East”„Academic Ranking of World Universities 2016”„Israel”„Israel”„Jewish Nobel Prize Winners”„All Nobel Prizes in Literature”„All Nobel Peace Prizes”„All Prizes in Economic Sciences”„All Nobel Prizes in Chemistry”„List of Fields Medallists”„Sakharov Prize”„Țara care și-a sfidat "destinul" și se bate umăr la umăr cu Silicon Valley”„Apple's R&D center in Israel grew to about 800 employees”„Tim Cook: Apple's Herzliya R&D center second-largest in world”„Lecții de economie de la Israel”„Land use”Israel Investment and Business GuideA Country Study: IsraelCentral Bureau of StatisticsFlorin Diaconu, „Kadima: Flexibilitate și pragmatism, dar nici un compromis în chestiuni vitale", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 71-72Florin Diaconu, „Likud: Dreapta israeliană constant opusă retrocedării teritoriilor cureite prin luptă în 1967", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 73-74MassadaIsraelul a crescut in 50 de ani cât alte state intr-un mileniuIsrael Government PortalIsraelIsraelIsraelmmmmmXX451232cb118646298(data)4027808-634110000 0004 0372 0767n7900328503691455-bb46-37e3-91d2-cb064a35ffcc1003570400564274ge1294033523775214929302638955X146498911146498911

                                        Кастелфранко ди Сопра Становништво Референце Спољашње везе Мени за навигацију43°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.5588543°37′18″ СГШ; 11°33′32″ ИГД / 43.62156° СГШ; 11.55885° ИГД / 43.62156; 11.558853179688„The GeoNames geographical database”„Istituto Nazionale di Statistica”проширитиууWorldCat156923403n850174324558639-1cb14643287r(подаци)