You can try this to draw the lines between the different points.
The difficulty is to select in your array the points that match together.
import numpy as np
n = 30
array = flatten([[a*vector([float(sqrt(3))/2,0.5]) +
b*vector([float(sqrt(3))/2,-0.5]) for a in (0..n)] for b in (0..n)] +
[[a*vector([float(sqrt(3))/2,0.5]) + b*vector([float(sqrt(3))/2,-0.5]) +
vector([-1/float(sqrt(2)),0]) for a in (0..n)] for b in (0..n)])
arrayP = np.asarray(array)
g = Graphics()
i = 0
while i < n**2:
pointO = arrayP[i]
pointA = arrayP[i + (n+1)**2]
pointB = arrayP[i + (n+1)**2 +1]
pointC = arrayP[i + (n+1)**2 + n+1]
line1 = line([pointO,pointA],aspect_ratio=1)
line2 = line([pointO,pointB],aspect_ratio=1)
line3 = line([pointO,pointC],aspect_ratio=1)
if i%(n+1) == n: #to avoid long return lines between points
g += line1 + line3
else:
g += line1 + line2 +line3
i +=1
g
Le vendredi 17 mai 2019 05:35:54 UTC+2, saad khalid a écrit :
>
> Hi everyone:
>
> I'm trying to using Sage's plot functionality to plot the honeycomb
> lattice:
>
> https://sites.google.com/site/makingplots4scipurposes/_/rsrc/1456789513003/gnuplot-samples-of-2d-lattices/honeycomb.png
>
> Plotting the honeycomb lattice is slightly different from plotting a
> simple (like a square) lattice, as each site is technically two points,
> with a basis vector pointing from one point to the other within a single
> site. So you take your two lattice vectors and start from some point and
> generate all possible points from those lattice vectors. Then you go back
> to your starting point, shift by the basis vector, and then generate all
> possible points from there using the lattice vector, and then you add these
> two sets of points together to get the honeycomb lattice. I've figured out
> how to do it using points at the corner of each hexagon, like this:
> list_plot(flatten([[a*vector([sqrt(3)/2,1/2]) + b*vector([sqrt(3)/2,-1/2])
> for a in (0..30)] for b in (0..30)] + [[a*vector([sqrt(3)/2,1/2]) + b*
> vector([sqrt(3)/2,-1/2]) + vector([-1/sqrt(2),0]) for a in (0..30)] for b
> in (0..30)]))
>
> However, I was hoping to do this with lines outlining the hexagons as
> shown in the linked image. Would anyone know of a way to do this? Thanks!
>
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-support.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/99c4f094-af21-409d-85fd-e89172c90be5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.