# Plotting energy dispersion on a hexagonal Brillouin zone

I'm trying to plot the energy dispersion of a graphene similar material. I've used the Tight Binding Function Approximation considering first neighbours and no overlaping. I have this 2 expressions of the energy:

  primera = 1/2 (A + B - Sqrt[ A^2 - 2 A B + B^2 + 12 β^2 + 8 β^2 Cos[Sqrt[3] d x] +
16 β^2 Cos[1/2 Sqrt[3] d x] Cos[(3 d y)/2]])
segunda = 1/2 (A + B + Sqrt[ A^2 - 2 A B + B^2 + 12 β^2 + 8 β^2 Cos[Sqrt[3] d x] +
16 β^2 Cos[1/2 Sqrt[3] d x] Cos[(3 d y)/2]])


I'have plotted using this expression:

Plot3D[{primera, segunda}, {x, -1.1, 1.1}, {y, -1.1, 1.1}]


But this will be correct if the first Brillouin Zone were a square lattice, but it isn't. It's hexagonal too so i have to plot over this geometric figure and i don't know how to do that.

I'd like to make something similar (leaving out the differences with this: http://demonstrations.wolfram.com/GrapheneBrillouinZoneAndElectronicEnergyDispersion/

I would appreciate any help about plotting over a hexagon or a link to a tutorial that explain the plotting along the high simmetry points.

Thank you very much.

Geralt.

• There are folks here that probably can help you with this. But there are also others who can help you if you exactly describe what do you want to do in terms of input/output leaving as much of physics behind as you can. :) – Kuba Jan 31 '15 at 11:03

if you need the plot only in hexagonal boundaries the RegionFunction option of Plot3D would be helpful

R = 1;

f = Interpolation[
Table[{a, R {Cos[a], Sin[a]}}, {a, -\[Pi], \[Pi], \[Pi]/3}],
InterpolationOrder -> 1];


then look what we obtained

ParametricPlot[f[a], {a, -\[Pi], \[Pi]}]


then we may plot some function with boundaries inside the region

Plot3D[x^2 + y^2, {x, -R, R}, {y, -R, R},
RegionFunction ->
Function[{x, y, z}, Norm@{x, y} <= Norm@f[ArcTan[y, x]]]]


• Thank you very much. That's exactly what i wanted. Now, I have the doubt that if this is physically correct but that's have not to do with Mathematica... :) – Geralt Jan 31 '15 at 13:05

In Mathematica version 10 you can directly plot over regions.

regularPolygon[nbrSides_Integer?(# > 2 &), scale_: 1] :=
Polygon[scale {Cos[#], Sin[#]} & /@
(2 Pi*Range[1/nbrSides, 1, 1/nbrSides])]

Manipulate[
plot[func,
Element[{x, y}, regularPolygon[n]],
AspectRatio -> Automatic],
{{func, x^2 + y^2, "Function"},
{x^2 + y^2, Sin[x] + Cos[y], Sin[x*y]}},
{{plot, DensityPlot, "Plot Type"},
{DensityPlot, ContourPlot, Plot3D}},
{{n, 6, "Polygon Sides"}, Range[3, 8]}]