text:
Hexagonal grids are used in some games but aren't quite as straightforward or common as square grids. I've been collecting hex grid resources for nearly 20 years, and wrote this guide to the most elegant approaches that lead to the simplest code, largely based on the guides by Charles Fu and Clark Verbrugge. I'll describe the various ways to make hex grids (I've counted 74 so far!), the relationships between them, as well as some common algorithms. Many parts of this page are interactive; choosing a type of grid will update diagrams, code, and text to match.
- Angles, size, spacing, drawing
- Coordinate systems
- Coordinate conversions
- Neighbors
- Distances
- Line drawing
- Range
- Rotation
- Rings
- Field of view
- Hex to pixel
- Rounding to nearest hex
- Pixel to hex
- Map storage
- Wraparound maps
- Pathfinding
- More reading
The code samples on this page are written in pseudo-code; they're meant to be easy to read and understand so that you can write your own implementation.
Switch to or back to hexagons.
Hexagons are 6-sided polygons. Regular hexagons have all the sides (edges) the same length. I'll assume all the hexagons we're working with here are regular. The typical orientations for hex grids are horizontal (or "pointy top") and vertical (or "flat top").
In a regular hexagon the interior angles are 120°. There are six wedges, each an equilateral triangle with 60° angles inside. This is what we need for drawing hexagons: given a center
and a size
(distance from center to corner), corner i is at center + polar(size,
60° * i)
. In code you might write it as:
add(center, polar(size, 2 * PI / 6 * i)
or expanded out:
angle = 2 * PI / 6 * i
x[i] = center_x + size * cos(angle)
y[i] = center_y + size * sin(angle)
Switch to or back to hexagons.
To draw a hexagon in a vector drawing library, iterate over i:
for each 0 ≤ i < 6:
angle = 2 * PI / 6 * i
x[i] = center_x + size * cos(angle)
y[i] = center_y + size * sin(angle)
if i == 0:
moveTo(x[i], y[i])
lineTo(x[i], y[i])
Size and Spacing
Next we want to put several hexagons together. In the vertical orientation, the width of a hexagon is width = size
* 2
. The horizontal distance between adjacent hexes is horiz = width * 3/4
Switch to or back to hexagons.
The height of a hexagon is height = sqrt(3)/2 *
. The vertical distance between adjacent hexes is vert = height
Some games use pixel art for hexagons that does not match an exactly regular polygon. The angles and spacing formulas I describe in this section won't match the sizes of your hexagons. The rest of the article, describing algorithms on hex grids, will work even if your hexagons are stretched or shrunk a bit.
Now let's assemble hexagons into a grid. With square grids, there's one obvious way to do it. With hexagons, there are multiple approaches. I recommend axial coordinates for most situations.
Offset coordinates
The most common approach is to offset every other column or row. I'm going to call the columns q
and the rows r
. You can either offset the odd or the even column/rows, so the horizontal and vertical hexagons each have two variants.
"odd-r" horizontal layout
"even-r" horizontal layout
"odd-q" vertical layout
"even-q" vertical layout
Cube coordinates
Another way to look at hexagonal grids is to see that there are three primary axes, unlike the two we have for square grids. There's an elegant symmetry with these.
Let's take a cube grid and slice out a diagonal plane at x + y + z = 0
Notice the three primary axes on the cube grid, and how they correspond to six hex grid diagonal directions; the diagonal grid axes corresponds to a primary hex grid direction.
Because we already have algorithms for square and cube grids, using cube coordinates allows us to adapt those algorithms to hex grids. I will be using this system for most of the algorithms on the page. To use the algorithms with another coordinate system, I'll convert to cube coordinates, run the algorithm, and convert back.
Try: and: .
Study how the cube coordinates work on the hex grid. Selecting the hexes will highlight the cube coordinates corresponding to the three axes.
Switch to or back to hexagons.
- Each direction on the cube grid corresponds to a line on the hex grid. Try highlighting a hex with
at 0, 1, 2, 3 to see how these are related. The row is marked in blue. Try the same forx
(green) andy
(purple). - Each direction on the hex grid is a combination of two directions on the cube grid. For example, northwest on the hex grid lies between the
, so every step northwest involves adding 1 toy
and subtracting 1 fromz
The cube coordinates are a reasonable choice for a hex grid coordinate system. The constraint is that x + y + z =
so the algorithms must preserve that. The constraint also ensures that there's a canonical coordinate for each hex.
There are many different valid 3-axis hex coordinate systems. Some of them have constraints other than x + y + z = 0
. I've shown only one of the many systems. You can also construct 3-axis coordinates with x-y, y-z, z-x
, and that has its own set of interesting properties, which I don't explore here.
"But Amit!" you say, "I don't want to store 3 numbers for coordinates. I don't know how to store a map that way."
Axial coordinates
The 2-axis coordinate system, sometimes called "trapezoidal", is built by taking two of the three coordinates from a 3-axis coordinate system. Since we have a constraint such as x + y + z = 0
, the third coordinate is redundant. I recommend using an axial coordinate system.
Switch to or back to hexagons.
There are many 3-axis systems, and many 2-axis systems. I'm not going to show all of the combinations in this guide. I'm going to pick q = x
and r = z
The advantage of this system over offset grids is that the algorithms are cleaner. The disadvantage of this system is that storing a rectangular map is a little weird; see the map storage section for ways to handle that. There are some algorithms that are even cleaner with cube coordinates, but for those, since we have the constraint x + y + z = 0
, we can calculate the third implicit coordinate and use that, just for those algorithms.
Although the 2-axis system shares two of the three coordinates from the 3-axis cube system, the axes end up being quite different. The cube axes are set in 3-dimensional space, whereas we need two axes (basis vectors) in 2-dimensional space. The angle between axes here will be 60°. See the diagram below. You can also construct an axial system where the axes are separated by 120°.
Offset coordinates are the first thing people think of, because they match the standard cartesian coordinates used with square grids. Unfortunately one of the two axes has to go "against the grain", and ends up complicating things. The cube and axial systems go "with the grain" and have simpler algorithms, but slightly more complicated map storage.
It is likely that you will use axial or offset coordinates in your project, but many algorithms are simpler to express in cube coordinates. Therefore we need to be able to convert back and forth.
# convert cube to axial q = x r = z # convert axial to cube x = q z = r y = -x-z # convert cube to even-q offset q = x r = z + (x + (x&1)) / 2 # convert even-q offset to cube x = q z = r - (q + (q&1)) / 2 y = -x-z # convert cube to odd-q offset q = x r = z + (x - (x&1)) / 2 # convert odd-q offset to cube x = q z = r - (q - (q&1)) / 2 y = -x-z # convert cube to even-r offset q = x + (z + (z&1)) / 2 r = z # convert even-r offset to cube x = q - (r + (r&1)) / 2 z = r y = -x-z # convert cube to odd-r offset q = x + (z - (z&1)) / 2 r = z # convert odd-r offset to cube x = q - (r - (r&1)) / 2 z = r y = -x-z
Note that I use a&1
(bitwise and) instead of a%2
(modulo) to detect whether something is even (0) or odd (1). When a
is positive, they will produce the same result. However, when a
is negative, programming languages differ on what they'll return. In some languages, -1 % 2 == -1
and in other languages -1 % 2 ==
. In some languages it depends on which compiler and machine you use (!). If your hex coordinates are always non-negative, or if in your language/compiler/machine -1 %
2 == +1
, then it makes no difference, and you can use a%2
instead of a&1
. However, I prefer to use a&1
to avoid running into the issue with negative coordinates. (Implementation note: in many (all?) languages, &
has lower precedence than +
so be sure to parenthesize a&1
In addition to these transforms, your grid numbering scheme may be offset by Δq, Δr. Subtract these before applying the conversion to cubes and add them after converting back from cubes to hex.
Given a hex, which 6 hexes are neighboring it? As you might expect, the answer is simplest with cube coordinates, still pretty simple with axial coordinates, and slightly trickier with offset coordinates. We might also want to calculate the 6 "diagonal" hexes.
Cube coordinates
Moving one space in hex coordinates involves changing one of the 3 cube coordinates by +1 and changing another one by -1 (the sum must remain 0). There are 3 possible coordinates to change by +1, and 2 remaining that could be changed by -1. This results in 6 possible changes. Each corresponds to one of the hexagonal directions. The simplest and fastest approach is to precompute the permutations and put them into a table of [Δx, Δy, Δz]
at compile time:
neighbors = [
[+1, -1, 0], [+1, 0, -1], [ 0, +1, -1],
[-1, +1, 0], [-1, 0, +1], [ 0, -1, +1]
d = neighbors[direction]
return Cube(x + d[0], y + d[1], z + d[2])
Axial coordinates
As before, we'll use the cube system as a starting point. Take the table of [Δx, Δy, Δz]
and convert into a table of [Δq, Δr]
with your choice of assignments. In this guide I use q = x
, r =
, so it'll be the same table as for cube coordinates, with y
neighbors = [
, , ,
, ,
d = neighbors[direction]
return Hex(q + d[0], r + d[1])
Offset coordinates
With offset coordinates, the change depends on where in the grid we are. If we're on an offset column/row then the rule is different than if we're on a non-offset column/row.
As above, we'll build a table of Δq
and Δr
. However this time there will be two arrays, one for odd columns/rows and one for even columns/rows. Each array with contain six elements [Δq, Δr]
. Look at (1,1)
on the grid map above and see how q
and r
change as you move in each of the six directions. Then do this again for (2,2)
neighbors = [ [ , , , , , ], [ , , , , , ] ] # note I use & 1 but mod 2 would work if it never returns -1 parity = q & 1 d = neighbors[parity][direction] return Hex(q + d[0], r + d[1])
However, for those of you who are curious, I'm going to show you how to derive a formula, from first principles. Feel free to skip the rest of this section.
First, be sure you understand the cube neighbor section above. There are six neighbors, and each increments one axis by 1 and decrements a different axis by 1, thus preserving the x + y + z = 0
For each of the six directions, we have Δx
, Δy
, Δz
. The key idea here is that we'll start with q, r
coordinates from the offset grid, convert them into cube coordinates x, y, z
, then add Δx,
Δy, Δz
, then convert back into offset coordinates q, r
. This general principle works for all the algorithms on the page.
I'll show how this works for a single offset grid type, "even-q": These are the coordinate conversions for "even-q", from the above section:
# convert cube to even-q offset q = x r = z + (x + (x&1)) / 2 # convert even-q offset to cube x = q z = r - (q + (q&1)) / 2 y = -x - z
I'm only going to show this for a single direction, northeast, with Δx = +1, Δy = 0, Δz = -1
# (1) convert even-q offset to cube coords: x = q y = -x - z z = r - (q + (q&1)) / 2 # (2) apply Δx, Δy, Δz: x' = x + 1 y' = y z' = z - 1 # (3) substitute eq (1) into eq (2): x' = q + 1 y' = -x - z z' = r - (q + (q&1)) / 2 - 1 # (4) convert back into even-q coords: q' = x' r' = z' + (x' + (x'&1)) / 2 # (5) substitute eq (3) into eq (4) q' = q + 1 r' = r - ( q + (q&1)) / 2 - 1 + (q + 1 + ((q + 1)&1)) / 2 = r + (-q - (q&1) - 2) / 2 + (q + 1 + (1 - (q&1))) / 2 = r + (-q - (q&1) - 2 + q + 1 + 1 - (q&1)) / 2 = r + ( -2 * (q&1)) / 2 = r - (q&1)
So that's it! We've worked through some math and it simplifies down to q' = q + 1
and r' = r -
. (For this case, y
doesn't play a role, but it does in other situations.) That's just for one direction, and only for even-q offset grids, but that's how it works. For those of you who are compiler/language enthusiasts, this is defining evenQ_neighbors(H)
as map(cube_to_evenQ,
, then inlining all that code and greatly simplifying. It's the type of work an compiler optimizer would do for you.
You can either work through all the cases, or you can perform the conversions at runtime (which likely will be optimized out by your compiler), or you can precalculate everything and put the results into lookup tables. I used lookup tables for my last game.
Moving to a "diagonal" space in hex coordinates changes one of the 3 cube coordinates by ±2 and the other two by ∓1 (the sum must remain 0).
diagonals = [[+2, -1, -1], [+1, +1, -2], [-1, +2, -1],
[-2, +1, +1], [-1, -1, +2], [+1, -2, +1]]
d = diagonals[direction]
return Cube(x + d[0], y + d[1], z + d[2])
As before, you can convert these into 2-axis by dropping one of the three coordinates, or convert to offset by precalculating the results.
Cube coordinates
In the cube coordinate system, each hexagon is a cube in 3d space. Adjacent hexagons are distance 1 apart in the hex grid but distance 2 apart in the cube grid. This makes distances simple. In a square grid, Manhattan distances are abs(x1-x2) + abs(y1-y2)
. In a cube grid, Manhattan distances are abs(x1-x2) + abs(y1-y2) +
. The hex distance is half that:
function hex_distance(Cube(x1, y1, z1), Cube(x2, y2, z2)): return (abs(x1 - x2) + abs(y1 - y2) + abs(z1 - z2)) / 2
An equivalent way to write this is by noting that one of the three coordinates must be the sum of the other two, then picking that one as the distance. You may prefer the "divide by two" form above, or the "max" form here, but they give the same result:
function hex_distance(Cube(x1, y1, z1), Cube(x2, y2, z2)): return max(abs(x1 - x2), abs(y1 - y2), abs(z1 - z2))
In the diagram, the max is highlighted. Also notice that each color indicates one of the 6 "diagonal" directions. You can also use the max of |Δx-Δy|, |Δy-Δz|,
to figure out which of the 6 primary directions a hex is in.
Axial coordinates
In the 2-axis system, the third coordinate is implicit. Let's convert 2-axis to cube (3-axis) to calculate distance. We do this by filling in the third coordinate, which can easily be calculated given the constraint x + y + z = 0
(I'm using x = q
and z = r
here but many configurations are possible):
function hex_distance(Hex(q1, r1), Hex(q2, r2)): var x1 = q1 var z1 = r1 var x2 = q2 var z2 = r2 var y1 = -(x1 + z1) var y2 = -(x2 + z2) return (abs(x1 - x2) + abs(y1 - y2) + abs(z1 - z2)) / 2
This can be greatly simplified, to this:
function hex_distance(Hex(q1, r1), Hex(q2, r2)): return (abs(q1 - q2) + abs(r1 - r2) + abs(q1 + r1 - q2 - r2)) / 2
If you write q1 + r1 - q2 - r2
as q1 - q2 +
r1 - r2
, and if you use the "max" form instead of the "divide by two" form, you get the "difference of differences" approach described here. No matter which way you write it, 2-axis hex distance is derived from the Mahattan distance on cubes.
Offset coordinates
This is trickier. The simplest way to do this is to convert offset coordinates to cube coordinates, then use cube distance. This pattern will repeat for several of the algorithms; sometimes the code can be simplified, as shown above for axial neighbors and distances.
How do we draw a line from one hex to another? I'm going to show a simple algorithm that may or may not be suitable for your needs, then offer pointers to other resources that have other algorithms.
The strategy here is to evenly sample the line at N+1
points, and figure out which hexes those samples are in. This is called linear interpolation.
The first question is, what is
? Simple: N is the hex distance between the endpoints. (The DDA Algorithm setsN
to the max of the distance along each axis. We want to do the same in cube space, which happens to be the same as the hex grid distance.)The next step is to evenly sample
points between pointA
and pointB
. Using linear interpolation, each point will beA * (1 - i/N) + B * i/N
, for values ofi
, inclusive. In the diagram these sample points are the dark blue dots.The final step is to convert each sample point back into a hex. The algorithm is covered later on this page.
Putting these together, to draw a line from A
to B
N = hex_distance(A, B) for each 0 ≤ i ≤ N: draw hex at hex_round(A * (1 - i/N) + B * i/N)
Implementation note: in many languages, when i
and N
are of type int
, i/N
will be 0. Make either i
or N
into a float by using 1.0*i/N
or float(i)/N
. Another implementation note: sometimes lines will look more consistent if you add a tiny value like Cube(1e-6, 1e-6, -2e-6)
to one of the endpoints before starting the loop.
The above interpolation algorithm is simple and reasonably fast. You can optimize it further by rewriting A * (1 -
i/N) + B * i/N
as A + (B - A) * i/N
, then precalculating (B - A)
and 1.0/N
. Multiplication can be turned into repeated addition. You'll end up with something like the DDA algorithm. If you need an alternative to the simple algorithm I presented, take a look at:
- Bresenham's line drawing on a hex grid (using offset grids)
- Super cover vs line drawing, not for hex grids, but an issue to consider when you want line of sight instead of line drawing
Coordinate range
Given a hex H and a range N, which hexes are within N steps from it?
We can work backwards from the hex distance formula, distance = max(|Δx|, |Δy|,
. To find all hexes within N steps, we need max(|Δx|, |Δy|, |Δz|) ≤ N
. This means we need all three of: |Δx| ≤ N
and |Δy| ≤
and |Δz| ≤ N
. Removing absolute value, we get -N ≤ Δx ≤ N
and -N ≤ Δy ≤ N
and -N ≤ Δz ≤ N
. This is expressed as a nested loop:
for each -N ≤ Δx ≤ N: for each -N ≤ Δy ≤ N: for each -N ≤ Δz ≤ N: if Δx + Δy + Δz = 0: results.append(H.add(Cube(Δx, Δy, Δz)))
This loop will work but it's somewhat inefficient. We're selecting a large cube in 3D and intersecting it with the x + y + z = 0 plane to get the hexes we want. It can be written more efficiently by incorporating the x + y + z = 0 constraint directly into the loop ranges:
for each -N ≤ Δx ≤ N: for each max(-N, -Δx-N) ≤ Δy ≤ min(N, -Δx+N): Δz = -Δx-Δy results.append(H.add(Cube(Δx, Δy, Δz)))
This loop iterates over exactly the needed coordinates. In the diagram, the lines show the bounding ranges for x, y, z. (Also might be useful: if you only require two of the three constraints to be true, you'll end up with a star shape instead of a hex shape.)
Intersecting ranges
If you need to find hexes that are in more than one range, you can intersect the ranges before generating a list of hexes.
You can either think of this problem algebraically or geometrically. Algebraically, each region is expressed as inequality constraints of the form -N ≤ Δx ≤ N
, and we're going to solve for the intersection of those constraints. Geometrically, each region is a cube in 3D space, and we're going to intersect two cubes in 3D space to form a cuboid in 3D space, then project back to the x + y + z = 0 plane to get hexes. I'm going to solve it algebraically:
First, we rewrite constraint -N ≤ Δx ≤ N
into a more general form, xmin ≤ x ≤
, and set xmin = H.x
and xmax = H.x + N
. We'll do the same for y
and z
, and end up with this generalization of the code from the previous section:
for each xmin ≤ x ≤ xmax: for each max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): z = -x-y results.append(Cube(x, y, z))
The intersection of two ranges a ≤ x ≤ b
and c ≤ x ≤ d
is max(a, c) ≤ x ≤ min(b,
. Since a hex region is expressed as ranges over x, y, z, we can separately intersect each of the x, y, z ranges then use the nested loop to generate a list of hexes in the intersection. For one hex region we set xmin = H.x - N
and xmax = H.x + N
and likewise for y
and z
. For intersecting two hex regions we set xmin = max(H1.x -
N, H2.x - N)
and xmax =
min(H1.x + N, H2.x + N), and likewise
and z
. The same pattern
works for intersecting three or more regions.
If there are obstacles, the simplest thing to do is a distance-limited flood fill (breadth first search). In this diagram, the limit is set to 4 moves. In the code, fringes[k]
is an array of all hexes that can be reached in k
steps. Each time through the main loop, we expand level k-1
into level k
visited = set() add start to visited fringes = [[start]] for each 1 < k ≤ movement: fringes[k] = [] for each cube in fringes[k-1]: for each 0 ≤ dir < 6: neighbor = cube.add(Cube.direction(dir)) if neighbor not in visited, not blocked: add neighbor to visited fringes[k].append(neighbor)
Given a hex vector (difference between one hex and another), we might want to rotate it to point to a different hex. This is simple with cube coordinates if we stick with rotations of 1/6th of a circle.
A rotation 60° right shoves each coordinate one slot to the right:
[ x, y, z] to [-z, -x, -y]
A rotation 60° left shoves each coordinate one slot to the left:
[ x, y, z] to [-y, -z, -x]
As you play with diagram, notice that each 60° rotation flips the signs and also physically "rotates" the coordinates. After a 120° rotation the signs are flipped back to where they were. A 180° rotation flips the signs but the coordinates have rotated back to where they originally were.
You can then convert these into axial or offset coordinates. See this stackexchange discussion for other ways to calculate rotation.
Single ring
To find out whether a given hex is on a ring of radius R, calculate the distance from that hex to the center and see if it's R. To get a list of all such hexes, take R steps away from the center, then follow the rotated vectors in a path around the ring.
H = direction(4).scale(R) results = [] for each 0 ≤ i < 6: for each 0 ≤ j < R: results.append(H) H = neighbor(H, i)
In this code, H
starts out on the ring, shown by the large arrow from the center to the corner in the diagram. I chose corner 4 to start with because it lines up the way my direction numbers work but you may need a different starting corner. At each step of the inner loop, H moves one hex along the ring. After 6 * R
steps it ends up back where it started.
Spiral rings
Traversing the rings one by one in a spiral pattern, we can fill in the interior:
results = [Cube(0, 0, 0)] for each 1 ≤ k ≤ N: H = direction(4).scale(k) for each 0 ≤ i < 6: for each 0 ≤ j < k: results.append(H) H = neighbor(H, i)
This is a different way to calculate movement range.
Given a location and a distance, what is visible from that location, not blocked by obstacles? There are clever ways to do this but I'm only going to show a brute force method. Note that it may not produce the results you want.
The "ray casting" algorithm is to enumerate each of the hexes on the exterior (the ring), then try to draw a line to it. Stop when the line reaches an obstacle. Note that ray casting is neither the most accurate nor the fastest approach; see my article on 2d visibility calculation for more.
Clark Verbrugge's guide describes a "start at center and move outwards" algorithm to calculate field of view. Also see the Duelo project, which has an an online demo of directional field of view and code on Github.
For hex to pixel, it's useful to review the size and spacing diagram at the top of the page. For axial coordinates, the way to think about hex to pixel conversion is to look at the basis vectors. In the diagram, the arrow A→Q is the q basis vector and A→R is the r basis vector. The pixel coordinate is q_basis * q + r_basis * r
. For example, B at (1, 1) is the sum of the q and r basis vectors.
If you have a matrix library, this is a simple matrix multiplication; however I'll write the code out without matrices here. For the x = q, z = r
axial grid I use in this guide, the conversion is:
x = size * sqrt(3) * (q + r/2) y = size * 3/2 * rx = size * 3/2 * q y = size * sqrt(3) * (r + q/2)
The matrix approach will come in handy later when we want to convert pixel coordinates back to hex coordinates. All we will have to do is invert the matrix. For cube coordinates, you can either use cube basis vectors (x, y, z), or you can convert to axial first and then use axial basis vectors (q, r).
For offset coordinates, we need to offset either the column or row number (it will no longer be an integer). After that you can use a q and r basis vector, aligned with the x and y axes:
x = size * sqrt(3) * (q + 0.5 * (r&1)) y = size * 3/2 * rx = size * sqrt(3) * (q - 0.5 * (r&1)) y = size * 3/2 * rx = size * 3/2 * q y = size * sqrt(3) * (r + 0.5 * (q&1))x = size * 3/2 * q y = size * sqrt(3) * (r - 0.5 * (q&1))
Unfortunately offset coordinates don't have basis vectors that we can use with a matrix. This is one reason pixel-to-hex conversions are harder with offset coordinates.
Another approach is to convert the offset coordinates into cube/axial coordinates, then use the cube/axial to pixel conversion. By inlining the conversion code then optimizing, it will end up being the same as above.
Note that the above conversions are for hex q=0,
being centered at x=0.0,
. If you want to center that hex elsewhere, add the desired center to the x, y
you get.
Given a cube coordinate (x, y, z)
, round each component to the nearest integer, (rx, ry,
. However, although x + y + z = 0
, after rounding we do not have a guarantee that rx + ry
+ rz = 0
. So we reset the component with the largest change back to what the constraint rx + ry + rz =
requires. For example, if the y-change |ry-y|
is larger than |rx-x|
and |rz-z|
, then we reset ry =
. This guarantees that rx + ry + rz =
function hex_round(Cube(x, y, z)): rx = round(x) ry = round(y) rz = round(z) x_diff = abs(rx - x) y_diff = abs(ry - y) z_diff = abs(rz - z) if x_diff > y_diff and x_diff > z_diff: rx = -ry-rz else if y_diff > z_diff: ry = -rx-rz else: rz = -rx-ry return Cube(rx, ry, rz)
For non-cube coordinates, the simplest thing to do is to convert to cube coordinates, use the rounding algorithm, then convert back.
This algorithm is based on Charles Fu's article. His code contains the additional optimization that if rx + ry + rz = 0
then there's no need to look at the error values and reset the largest component.
One of the most common questions is, how do I take a pixel location (such as a mouse click) and convert it into a hex grid coordinate?
- We're going to first get an approximate axial coordinate location by inverting the hex-to-pixel axial conversion.
- Then we're going to find the closest hex to that by one of many techniques.
The approximate location is easiest to calculate using axial coordinates, and finding the closest hex is easiest to calculate using cube coordinates. If you're using axial or cube, no problem; it's easy to go back and forth. But if you're using offset coordinates, you need to get the approximate location with axial, then find the closest hex with cube, then convert the cube to your choice of offset coordinates.
1. Approximate location, axial
To convert from hex coordinates to pixel coordinates, we multiplied q, r
by basis vectors to get x, y
. You can think of this as a matrix multiply. Here's the matrix for "pointy top" hexes:
⎡x⎤ ⎡ sqrt(3) sqrt(3)/2 ⎤ ⎡q⎤ ⎢ ⎥ = size × ⎢ ⎥ × ⎢ ⎥ ⎣y⎦ ⎣ 0 3/2 ⎦ ⎣r⎦
Converting from pixel coordinates back to hex coordinates is straightforward. We can invert the matrix:
⎡q⎤ ⎡ sqrt(3)/3 -1/3 ⎤ ⎡x⎤ ⎢ ⎥ = ⎢ ⎥ × ⎢ ⎥ ÷ size ⎣r⎦ ⎣ 0 2/3 ⎦ ⎣y⎦
Here's the corresponding code for "pointy top" axial hexes:
q = (x * sqrt(3)/3 - y / 3) / size r = y * 2/3 / size
And here's the code for "flat top" axial hexes:
q = x * 2/3 / size r = (-x / 3 + sqrt(3)/3 * y) / size
This gives us a real number for q
and r
, in axial coordinates; in the next step we turn these into integers.
Note that the above conversions assume for hex q=0,
is centered at x=0.0, y=0.0
. If you want to center that hex elsewhere, subtract the desired center from the x, y
before converting.
2. Find the nearest hex
Once we have fractional hex coordinates from step 1, we need to convert them into integer hex coordinates. You might want to use round()
or floor()
. That works for square grids but it's a little trickier for hex grids.
2a. Using hex rounding
Use hex rounding to convert the fractional coordinate above into an integer cube coordinate.
Once you have the cube coordinate, convert that into the coordinate system you use.
2b. Guess and test
Use regular rounding to get a first guess to the hexagon. Scan its neighbors and itself, and pick the one closest with Euclidean distance. This works because a regular hex grid also happens to satisfy the Voronoi property: the hexagon contains all points that are closer to its center than to any other hexagon center.
Unlike hex rounding, this approach doesn't require you to use cube coordinates. It's often simpler if you're using offset coordinates, because you can make a guess directly in offset coordinates instead of using axial coordinates as above.
2c. Pixel map
Instead of scanning the neighbors each time, note that the answer is always the same relative to the position you're given. You can store the answer in a 2D array or bitmap. Given a screen location x, y
, make an initial guess q0, r0
. If that hexagon is centered at x0,
, so you can store dq, dr
for each x
- x0, y - y0
. Then the answer will be q0 + dq, r0 +
. I've used this in a previous project but for future projects I'll use hex rounding.
- A system I used for an old game encodes the pixel boundary in an array.
An advantage of this technique is that it works at the pixel level instead of the geometric level, so you get precise control of what happens for the points on the boundary between two hexes.
3. Other approaches
There are other approaches that don't fit into the "find an approximate location" then "find the nearest hex" steps above.
By looking at the geometry of hexagons you can narrow down a pixel location to either one, two, or three hexagons, typically by dividing hexagons into smaller shapes. You can then use the edges between hexes to determine which subshape the pixel coordinate is on. There are a variety of shapes you can use. Here are some articles to read with details:
- Hexagonal Grid Math uses a combination of one rectangle and two triangles per hexagon.
- Hexagonal tilemap picking also uses rectangles and triangles.
- Resolving the Hexagonal Coordinates of Screen Points uses three rhombuses per hexagon.
- Coordinates in Hexagon Based Tile Maps uses two triangles and one pentagon for even rows and one triangle and two quadrilaterals for odd rows.
- Hexagon hit testing also uses different shapes for even/odd rows.
- Paul Gyugyi's system uses six triangles per hexagon.
- The HexPart system uses four quadrilaterals per hexagon.
These are natural ways to approach the problem but I find that hex rounding is more elegant, conceptually simple, and less error prone (fewer cases to handle).
Branchless Method
All the pixel to hex conversions I've seen use branches or a lookup table. I was mystified when Charles Chambers sent me pixel to hex conversion code that uses floor()
five times, but no branches. First, divide x
and y
by size * sqrt(3)
; then find q, r
temp = floor(x + sqrt(3) * y + 1) q = floor((floor(2*x+1) + temp) / 3); r = floor((temp + floor(-x + sqrt(3) * y + 1))/3);
How does it work? I admit I don't yet fully understand this one. Charles uses the floor()
function to divide space into rhombuses which make up hexagonal rows. If you look at subexpressions in the "inner" calls to floor()
, 2 * x
, x + sqrt(3) * y
, and -x +
sqrt(3) * y
, you'll notice that they're dot products of (x, y)
with the three basis vectors aligned with the hex grid. Each "outer" call to floor()
combines two of the dot products.
If you're using this for your own project, note that the q, r
here are for a different axial form than the one I use in this guide. See this comment from Kenneth Shaw for a version that works with axial coordinates.
I suspect that extending this to work with cube coordinates directly will help me understand how it works.
One of the common complaints about the 2-axis coordinate system is that it leads to wasted space when using a rectangular map; that's one reason to favor an offset coordinate system. However all the hex coordinate systems lead to wasted space when using a triangular or hexagonal map. We can use the same strategies for storing all of them.
Notice in the diagram that the wasted space is on the left and right sides of each row (except for rhombus maps) This gives us three strategies for storing the map:
- Ignore the problem. Use a dense array with nulls or some other sentinel at the unused spaces. At most there's a factor of two for these common shapes; it may not be worth using a more complicated solution.
- Use a hash table instead of dense array. This allows arbitrarily shaped maps, including ones with holes. When you want to access the hex at
you accesshash_table(hash(q,r))
instead. Encapsulate this into the getter/setter in the grid class so that the rest of the game doesn't need to know about it. - Slide the rows to the left, and use variable sized rows. In many languages a 2D array is an array of arrays; there's no reason the arrays have to be the same length. This removes the waste on the right. In addition, if you start the arrays at the leftmost column instead of at 0, you remove the waste on the left.
To do this for arbitrary convex shaped maps, you'd keep an additional array of "first columns". When you want to access the hex at
you accessarray[r][q - first_column[r]]
instead. Encapsulate this into the getter/setter in the grid class so that the rest of the game doesn't need to know about it. In the diagramfirst_column
is shown on the left side of each row.If your maps are fixed shapes, the "first columns" can be calculated on the fly instead of being stored in an array.
- For rectangle shaped maps,
first_column[r] == -floor(r/2)
, and you'd end up accessingarray[r][q + r/2]
, which turns out to be equivalent to converting the coordinates into offset grid coordinates. - For triangle shaped maps as shown here,
first_column[r] == 0
, so you'd accessarray[r][q]
— how convenient! For triangle shaped maps that are oriented the other way (not shown in the diagram), it'sarray[r][q+r]
. - For hexagon shaped maps of radius
, whereN = max(abs(x), abs(y), abs(z)
, we havefirst_column[r] == -N - min(0, r)
. You'd accessarray[r][q + N + min(0, r)]
. However, since we're starting with some values ofr < 0
, we also have to offset the row, and usearray[r + N][q + N + min(0, r)].
- For rhombus shaped maps, everything just matches nicely, so you can use
- For rectangle shaped maps,
In some games you want the map to "wrap" around the edges. In a square map, you can either wrap around the x-axis only (roughly corresponding to a sphere) or both x- and y-axes (roughly corresponding to a torus). Wraparound depends on the map shape, not the tile shape. To wrap around a rectangular map is easy with offset coordinates. I'll show how to wrap around a hexagon-shaped map with cube coordinates.
Corresponding to the center of the map, there are six "mirror" centers. When you go off the map, you subtract the mirror center closest to you until you are back on the main map. In the diagram, try exiting the center map, and watch one of the mirrors enter the map on the opposite side.
The simplest implementation is to precompute the answers. Make a lookup table storing, for each hex just off the map, the corresponding cube on the other side. For each of the six mirror centers M
, and each of the locations on the map L
, store mirror_table[M.add(L)] = L
. Then any time you calculate a hex that's in the mirror table, replace it by the unmirrored version.
For a hexagonal shaped map with radius N
, the mirror centers will be Cube(2*N+1, -N, -N-1)
and its six rotations.
If you're using graph-based pathfinding such as A* or Dijkstra's algorithm or Floyd-Warshall, pathfinding on hex grids isn't different from pathfinding on square grids. The explanations and code from my pathfinding tutorial will work equally well on hexagonal grids.
- Neighbors. The sample code I provide in the pathfinding tutorial calls
to get the neighbors of a location. Use the function in the neighbors section for this. Filter out the neighbors that are impassable. - Heuristic. The sample code for A* uses a
function that gives a distance between two locations. Use the distance formula, scaled to match the movement costs. For example if your movement cost is 5 per hex, then multiply the distance by 5.
- In my Guide to Grids, I cover axial coordinate systems to address square, triangle, and hexagon edges and corners, and algorithms for the relationships among tiles, edges, and corners. I also show how square and hex grids are related.
- The best early guide I saw to the 2-axis coordinate system was Clark Verbrugge's guide, written in 1996.
- The first time I saw the cube (3-axis) coordinate system was from Charles Fu's posting to rec.games.programmer in 1994.
- James McNeill has a nice visual explanation of grid transformations.
- DevMag has a nice visual overview of hex math including how to represent areas such as half-planes, triangles, and quadrangles.
- Overview of hex coordinate types: staggered (offset), interlaced, 3d (3-axis), and trapezoidal (2-axis).
- The Rot.js library has a list of hex coordinate systems: non-orthogonal (axial), odd shift (offset), double width (interlaced), cube.
- Range for cube coordinates: given a distance, which hexagons are that distance from the given one?
- Distances on hex grids using cube coordinates, and reasons to use cube coordinates instead of offset.
- This guide explains the basics of measuring and drawing hexagons, using an offset grid.
- Convert cube hex coordinates to pixel coordinates.
- This thread explains how to generate rings.
- The HexPart system uses both hexes and rectangles to make some of the algorithms easier to work with.
- Are there pros and cons of "pointy topped" and "flat topped" hexagons?
- Line of sight in a hex grid with offset coordinates, splitting hexes into triangles
- Hexnet explains how the correspondence between hexagons and cubes goes much deeper than what I described on this page, generalizing to higher dimensions.
- I used the PDF hex grids from this page while working out some of the algorithms.
- Generalized Balanced Ternary for hex coordinates seems interesting; I haven't studied it.
- Hex-Grid Utilities is a C# library for hex grid math, with neighbors, grids, range finding, path finding, field of view. Open source, MIT license.
- The Reddit discussion and Hacker News discussion and MetaFilter discussion have more comments and links.
My code isn't great but if you want to take a look, the core algorithms and data structures are in Haxe and compiled down to Javascript: Cube.hx, Hex.hx, Grid.hx, ScreenCoordinate.hx; the UI code is in Javascript and uses D3.js for visualization: ui.js and cubegrid.js (for the cube/hex animation).
There are lots more things I wanted to do for this guide but didn't have time. I'm keeping a list on Trello. Do you have suggestions for things to change or add? Comment below.


text:
Recent comments
- Corporate Psycho
- March 01, 2013 - 16:47
Lemme guess? Marshall is going to build a hospital in CB as well? Right. This guys budgeting has been so far out of whack it's bizarre.
- Colin Burke
- March 01, 2013 - 12:49
I guess a "golden time of opportunity" is the best our government can manage, as being far easier to achieve than a "golden time of success," which I myself somewhat doubt that the teaching of history will by itself ensure.
- Maurice E. Adams
- March 01, 2013 - 07:54
Not so, Wally, ---- visits to my website on average has about doubled since Muskrat Falls was sanctioned.
- wtf
- March 01, 2013 - 09:58
Sounds like the choir is still listening.
- Maurice E. Adams
- March 01, 2013 - 07:31
F-35 fighter jets, in terms of their life cycle (capital, debt servicing and operating) costs over 40 years have been deemed to be unaffordable for 35 million Canadians, but Muskrat Falls will cost 200,000 Newfoundland ratepayers $35 billion over its 50 year life cycle ---- an unaffordable 140 times more on a per capita basis.
- Wally
- March 01, 2013 - 07:42
I don't think anyone is listening anymore.
- a business man
- March 01, 2013 - 09:25
Maurice, I support MF because it is good for my business interests in Nova Scotia, So however Newfoundland suffers as a result of MF is fine with me. That is my opinion as a Newfoundland born and raised citizen, voter and taxpayer. I would be okay if Newfoundland goes bankrupt.

subset: commoncrawl


text:
If your old Chrysler Sebring AC compressor is leaking incessantly, then it clearly needs to be replaced. You can get a really good AC compressor for your Chrysler Sebring from our catalog at a cost that won't deflate your wallet.
With thousands of AC compressor grade-A picks in our part selection, we promise you that there's a fair share of OE replacement Chrysler Sebring-compatible ones. Don't even think you're restricted to the model of Chrysler Sebring AC compressor you're currently using, because we have something for everybody and every car, truck, or sport utility vehicle. For owners who are into getting their hands dirty with DIY tasks, the coating of your Chrysler Sebring AC compressor is crucial for visibility purposes during repairs, and that's why we have natural, shiny/polished, and dazzling chrome color coatings offered.
Order from us and you can easily get huge discounts on world-class brands like Spectra, AirOne, and Delphi, with no hidden charges , no strings attached. The one thing for you to do now is enter your vehicle specifications, decide on a Chrysler Sebring AC compressor, then you're all good to go!
Market Price :$671.09
Discount Price :$658.01
Total Savings :$13.08
Market Price :$375.78
Discount Price :$379.28
Total Savings :$-3.50
Market Price :$17.71
Discount Price :$9.53
Total Savings :$8.18
Market Price :$317.48
Discount Price :$309.17
Total Savings :$8.31
Market Price :$287.50
Discount Price :$268.90
Total Savings :$18.60


text:
Violin Maker Michael Klein
OPB | July 24, 2003 10 a.m.
Michael Klein searches Oregon forests, looking for the perfect tree to make his beautiful musical instruments. This attention to detail pays off. There's a four-year waiting list for one of his homegrown violins, violas, and cellos.
First Broadcast: 2003
Producer: Mike Midlo


text:
Radio Bop 60s - The Boss Is Back!: "Radio Bop 60s celebrates the great music of the most important decade of the modern musical era...the decade that gave us the Beatles, the Beach Boys, Bob Dylan and the Rolling Stones...we're talking (of course) the SIXTIES!
Radio Bop 60s also pays homage to the great Rock 'n Roll radio stations of the day...in particular, Boss Radio 93/KHJ Los Angeles when it launched in 1965 and moved up to #1 in 'Boss Angeles' in a matter of weeks."
You can listen at the link. Hat tip to Mike McGruff.
Or, if you want some '50s mixed in with the '60s, click here. Some great stuff.
Thursday, July 24, 2008
2 comments:
- Todd Mason said...
Another Radio Alert: Public Radio International's WHOLE LOTTA SHAKIN' has picked up a Peabody, and thus is getting more broadcast clearance than it did, as in Philadelphia...it's a radio doc series about the folks who got their start at Sun Records, and you can hear at least one installment here:
http://www.pri.org/arts-entertainment/music/shakin-peabody-award.html - 9:24 AM
- Bill Crider said...
Thanks, Todd. Excellent.
Subscribe to:
Post Comments (Atom)


text:
During a storm, our power went out. After power and cable was restored, my husband turned our LG32LH20 TV back on to find the audio works, but the screen is black with white scattered across it. Is there a way to fix this, or is the TV ruined? We do not have the manual.
All our other TVs in the home work fine. thanks |
Follow-Up Postings:
When you say the screen is black with white scattered across it, is it what people refer to as "snow" (an array of white, grey and black dots)? Also, is the sound just noise, or actual audio from a TV channel? If that's the case, and the audio is just noise, chances are there's nothing wrong with your TV and your cable still doesn't work. Sometimes when power goes out during a storm power gets restored before cable. Are you sure that your cable signal is restored? |
- Posted by yosemitebill (My Page) on Sat, Jan 14, 12 at 20:52
Electronics such as televisions, cable boxes, DVD players, etc, use microprocessor controls (like your computer) that can get caught up in erroneous modes and need to be "reset". While it's difficult to say if that is the problems here, I'd recommend unplugging the AC line connections for both the television and cable box. Also, if you are using an HDMI connection between the two, unplug one end as well - sometimes the two units lose their handshake connection established for encryption and copy protection purposes. Wait about 30 mins (longer than usually necessary but it still sometimes helps) and plug the AC line cords on both devices back in - without turning anything on. Reconnect the HDMI cable, turn on the television, and then turn on the cable box. Then, check and see if the problem may have been corrected. And keep your fingers crossed! |
U probably had a power surge and blew ur units control board. Time for homeowners insurance claim. I hope ur deductible is less than units value? $500 deduct and $499 tv? Oops. |
Please Note: Only registered members are able to post messages to this forum. If you are a member, please log in. If you aren't yet a member, join now!
Return to the Electronics Forum
Information about Posting
- You must be logged in to post a message. Once you are logged in, a posting window will appear at the bottom of the messages. If you are not a member, please register for an account.
- Please review our Rules of Play before posting.
- Posting is a two-step process. Once you have composed your message, you will be taken to the preview page. You will then have a chance to review your post, make changes and upload photos.
- After posting your message, you may need to refresh the forum page in order to see it.
- Before posting copyrighted material, please read about Copyright and Fair Use.
- We have a strict no-advertising policy!
- If you would like to practice posting or uploading photos, please visit our Test forum.
- If you need assistance, please Contact Us and we will be happy to help.
Learn more about in-text links on this page here


text:
Unfortunately, they are also the people most likely to be diagnosed withe breast cancer. According to the National Cancer Institute, 1 in 8 women are diagnosed with breast cancer in their lifetime.
Luckily, breast cancer does not have to be a life sentence. Cancer in the breast can be detected by self breast exams (SBE), clinical breast exams (CBE) and mammograms. Taking the time to learn about breast cancer and informing others can help save a life of the people we love.
Self breast exams should be done monthly after the woman's menstrual cycle. Although doing SBE's is not the recommended method for finding breast cancer, it is highly important in helping women know what is normal for their breast and their body while helping to spot any changes.
While self breast exams and clinical breast exams are important factors in detecting breast cancer, the most effective tool is a mammogram. While early detection is helpful to survive breast cancer, there are also steps that can be taken to prevent it. Breast cancer is the second-leading cause of death by cancer among women. Knowing all the available options when it comes to treatment is also key since finding the right treatment will help immensely in fighting breast cancer effectively.
A monthly self-breast exam is the easiest way to screen for breast cancer. A mammogram, typically recommended for all adult women, is another way to check for breast cancer. The age when you begin getting mammograms will depend on your risk factors for contracting breast cancer. There are now even clinics that cater to individuals seeking alternative treatment methods for breast cancer. Nutrition is increasingly being recognized as one way of helping treat breast cancer and its symptoms. Electronic or magnetic therapies are modalities that are also showing promise in treating various types of cancer, not just breast cancer.
Read More About Breast Cancer : http://hardcancer.blogspot.com/2011/09/breast-cancer.html


text:
I know little about planting garlic. Last spring '10 I planted about 10 cloves in my garden. This spring, they have came up in clusters of plants about 20 in each cluster. They sperate relatively easy with nice roots. At this time, do I seperate each new plant and re-plant them seperately like onions? and is this the right time of year. |
Follow-Up Postings:
- Posted by fatamorgana Zone 5/6 (My Page) on Mon, Apr 11, 11 at 9:22
Fall is the time for planting cloves. But if your garlic has sprouted and it is crowded, I would move them as early as possible in the spring. I let some hardneck garlic flower last year. I got TONS of little bulbils to plant - which I did and they have ALL appeared to have sprouted. I will have to move or thin some myself. FataMorgana |
- Posted by soilent_green 4b MN (My Page) on Mon, Apr 11, 11 at 23:33
Welcome to garlic growing! It is a very fun hobby, and can get a little bit addictive. Mature garlic bulbs are comprised of cloves that are separated and planted individually approximately 6 inches apart. Each clove will then grow and produce another bulb of cloves. As such there is no way a single clove will produce a "cluster" of plants. I am curious what you indeed planted. Did you plant an entire bulb? Or maybe plant clusters of bulbils that are produced at the tops of mature garlic plants? A gardener really wants to avoid doing either of the above. If they are bulbils, try to separate and plant individuals but note you will not get full size garlic bulbs from bulbils in only one season. They are also good to use at that stage as a "green" garlic in cooking. I mean no offense, but correct terminology is important for folks to correctly assess your situation and provide helpful responses. :-) There is also good help available from some knowledgeable folks in the GW Allium Forum. Best of luck! -Tom
- Posted by fatamorgana Zone 5/6 (My Page) on Tue, Apr 12, 11 at 8:09
One of the beauties of GardenWeb is that most forums do overlap with one or more other forums and so asking questions on the different forums will get you other and often varied responses. I'm sure the allium forum will give you a great deal of quality info on growing garlic! Yes, the bulbils do take multiple seasons to mature but that's ok. It's kind of like planting perennial seed - you expect it to take more than a season to mature. Right now my garlic looks like rows of baby grass. FataMorgana |
I had a bulb in the spring of '10. I seperated the cloves and planted them individually at that time. They each grew into plants which I never touched. This spring it seems like each clove must have turned into a bulb which obviously turned into about 20 cloves. Which have individually sprouted into plants which are in thick clusters. I'm thinking I need to pull the clusters and re-plant each individual. Thanks |
- Posted by harleygirlmars 7 (My Page) on Tue, Apr 12, 11 at 20:30
Out of curiosity, can you take some of the leaves and eat them like you can a green onion? |
I am fairly new to growing garlics. I started in 2008. I have learned that HARDNECKs grow bulbils. Now, if you plant them separately, they will produce a small , round single clove garlic.Or so I am told. I am actually close to verifying that claim this season. My planted bulbils are growing. Their top is much smaller than the one from garlic cloves. And I think there is a corelation between the size of the top and the bottom. Actually, I like round single clove garlic. Sometimes when you plant a tiny clove or growing condition is poor, you might get a single clove smallish garlis. I had a few of them last year. Now if you plant these single cloves, then you will get normal multi-clove garlic. Q: Can you eat/cook with garlic greens? A: Definitely you can. They are sold in Asian markets all the time. |
melvinn - if you didn't harvest the garlic in summer 2010 that is why you now have a cluster of plants. When you plant a clove it is expected that you will harvest it when it has produced a bulb ie cluster of new cloves. If you don't harvest it then each clove will grow and in turn produce another bulb/cluster. |
Please Note: Only registered members are able to post messages to this forum. If you are a member, please log in. If you aren't yet a member, join now!
Return to the Herbs Forum
Information about Posting
- You must be logged in to post a message. Once you are logged in, a posting window will appear at the bottom of the messages. If you are not a member, please register for an account.
- Please review our Rules of Play before posting.
- Posting is a two-step process. Once you have composed your message, you will be taken to the preview page. You will then have a chance to review your post, make changes and upload photos.
- After posting your message, you may need to refresh the forum page in order to see it.
- Before posting copyrighted material, please read about Copyright and Fair Use.
- We have a strict no-advertising policy!
- If you would like to practice posting or uploading photos, please visit our Test forum.
- If you need assistance, please Contact Us and we will be happy to help.
Learn more about in-text links on this page here


text:
This shell is part of beach theme quilt.
Sea pictures are paper pieced perfect decoration for your home.
Go to the beach!
You will receive a file in PDF format with short instructions, color version and numbered paper pieced quilt pattern . Just print and start!
IDEA - you can use to make a coaster.
PDF format allows you to print and reprint the pattern pieces whenever you need.
The size is 4 inches. Easy to scale if needed.
All pictures are designed by me.
Thanks and happy sewing!
Quilting | |
Other |
Visit my shop for mug rugs only here:
I am Electronic Dipl. Ing. I have taught students in the university.
The quilting is my love and passion.
I have ...
Visit my shop for mug rugs only here:
I am Electronic Dipl. Ing. I have taught students in the university.
The quilting is my love and passion.
I have found patchwork around ten years ago reading a magazine.
My first project was a table runner with one Marple leaf and mitered corners.
You may say there is nothing special in this block.
Imagine I have had scissors only and an old household sewing machine.
No mat. No rotary cutter. I have not seen any video how to make it easier.
I made the runner my way and began to read tips, techniques, tutorials.
At the end of last year I won first quilt competition in my country with first prize Bernina sewing machine.
Now with the power of Internet and social networks I have friends from all over the world.
I was nominated by the Modern Quilt Guild for 100 days of Modern quilting in week of composition.
I have explored many aspects of the patchwork and quilting.
My patterns are easy to sew. The pictures look primitive, because I believe that children have to cultivate their imagination. There are plenty of fabrics with perfect prints on.
You could add your projects' photoes here:
Thank you for being my guest!


text:
Most Popular in:
Natural Personal Care Markets Vibrant, Naturally Evolving
Posted: March 13, 2012
page 2 of 2
"Natural personal care is not a fad, but a genuine movement that's manifesting itself in ever diverse product applications," continues Mills. "The consumer is better educated, and this can serve the marketer well, particularly as credible certification standards are being implemented and recognized."
The global market for natural personal care products is expected to maintain strong growth with a compound annual growth rate of almost 10% through 2016. The growth of truly natural products will likely outpace that of natural-inspired brands across most regions; however, natural-inspired brands will continue to dominate the global natural personal care market.
Want to See More News Like This?
Subscribe to the e-newsletter for free and receive news, articles and headlines just like this, delivered directly to your inbox.


text:
Select () or exclude () categories to narrow your recipe search.
As you select categories, the number of matching recipes will update.
Find exactly what you're looking for with the web's most powerful recipe filtering tool.
I live in Minnesota and work at a local salon as a stylist.
I love to cook and bake! I am constantly searching for a new recipes and cookbooks.
Besides cooking, I love to read, be with family and be online.
Down-to-earth comfort foods! I am definitely NOT a health nut, so if it comes from me it is probably packed with calories! Love cooking anything rom all american to mexican to asian, but I LOVE baking. I wish I still had more time to do it, but between work and daily life, I find myself cheating more and more with box mixes!


text:
Planes > alwaysakid's Garage
About alwaysakid's Garage
About me and my passion for planes
Spend too much money on cars to afford flying. But if I ever become disgustingly wealthy, I'd get a license to fly. Might even learn to fly, first, too.
My first plane
Probably should get a pilot's license first.
Plane I wish I still had
Haven't gotten it yet.
My dream plane
An ultra light.
My certifications
— Profile last updated: Jan 15, 2015
alwaysakid's Garage Comments
Log in to post comments.
Read comments on alwaysakid's garage (0)
No comments have been posted on alwaysakid's garage.
Planes > alwaysakid's Garage


text:
The David D. Palmer Health Sciences Library is pleased to announce the acquisition of the George J. Goodheart Jr. Library, a collection consisting of over 1,400 books, 200 journals, 150 trays of slides, 100 artifacts and 12 scrapbooks. After the death of George Goodheart, D.C. (National College of Chiropractic '39) in 2008, his widow, JoAnn, was advised by the board of the International College of Applied Kinesiology to donate his extensive collection to Palmer College. Dr. Goodheart was the founder of the International College of Applied Kinesiology, and lectured extensively throughout the world.
"The board recommended Palmer College because of our reputation for excellence in archival historical preservation," said Alana Callender, Director of History at Palmer College. "The archival materials that were donated will become part of the Library's collection, with most being placed in Palmer Special Collections, as will many of the books (duplicates will go into circulation). A number of artifacts will become part of the Museum collection."
A reception was held in the David D. Palmer Health Sciences Library during Homecoming in honor of Mrs. Goodheart's donation and in honor of Dr. Goodheart's accomplishments and of the collection. Mrs. Goodheart, the Board of Directors of the International College of Applied Kinesiology, and many Applied Kinesiology practitioners were in attendance.
According to the International College of Applied Kinesiology, "In 1964, Dr. George Goodheart made the first correlation between finding a weak muscle using manual muscle testing and then employing chiropractic therapy to make it stronger. … [He] wrote many works on Applied Kinesiology and lectured on the topic often. Among his many professional honors, he was the first chiropractor to serve on the U.S. Olympic Medical Team in 1980."
"We are pleased with Mrs. Goodheart's donation of Dr. Goodheart's papers and artifacts," said Senior Director for Library Sciences Dennis Peterson. "His collection enhances our growing Special Collections materials from prominent chiropractors and chiropractic scholars. The Library's Special Services department's mission is to preserve the profession's heritage and to support its historical scholarship. Dr. Glenda Wiese and her staff's reputation for securing, preserving and appropriately accessioning other donated chiropractic special collections played a key role in Mrs. Goodheart's decision, and for their dedication we all will benefit."
Social Media Hub


text:
By Rick Thompson TAC Legislative Staff
The Texas Health and Human Services Commission (HHSC) issued a letter providing more details about changes to federal funding programs and how to access Upper Payment Level (UPL) funds.
As was previously reported, the Centers for Medicare and Medicaid Services (CMS) approved a Section 1115 Demonstration Waiver on Dec. 12, 2011 to expand managed care statewide in an effort to achieve state budget savings and preserve hospital access to funding consistent with UPL.
The Jan. 5 letter was sent to Medicaid hospitals, County Indigent Care Health Program coordinators and other qualifying entities.
"This letter provides background information on who will be affected, an overview of the types of changes, and ways for you to obtain additional information on the changes and what you will need to do if you are currently involved in the UPL program, or if you would like to participate in the opportunities offered under the 1115 waiver program that will replace the current UPL program," wrote HHSC Executive Director Thomas Suehs.
Under the waiver program, eligibility to continue receiving UPL and incentive payments (defined under "Waiver Funding" on page two of the letter) will require participation in a Regional Healthcare Partnership (RHP).
Questions remain about how the RHP will be designed, what type of participation counties will have in the RHP, what local funds will qualify for matching, how those local health care dollars may be used as matching funds to draw down additional federal dollars and what regions counties can participate in.
Since being contacted by HHSC last July, TAC and the County Judges and Commissioners Association of Texas have been working with HHSC on the development and implementation of the Medicaid Waiver. The primary goal of TAC's participation is to represent the interest of counties and to ensure the waiver is beneficial to counties by maintaining flexibility.
Answers to additional questions are needed to get counties to utilize the waiver and participate in a RHP. TAC is continuing to work with HHSC to get those questions resolved.


text:
When I export ppt to pdf, the background image also gets converted as a part of the pdf. Is there an option to disable inclusion of background images? Can this be done via terminal?
Take the 2-minute tour
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.


text:
I live in a 2900 sq ft house with an upstairs master bath that has a large jacuzzi tub. we currently have a 58 gal electric water tank that we'll need to replace to have sufficient hot water. Will a tankless work for us? Looking for suggestions! Thanks. |
Follow-Up Postings:
A large-capacity electric tankless water heater requires a hefty electric circuit ... considerably larger than a traditional tank unit. Some rewiring would be needed to retrofit one in place of an existing tank unit. What size circuit depend on the capacity of the selected tankless unit. My whole-house electric tankless requires a 120 amp circuit, compared to a typical 50-gal tank unit taking a 25- to 30 amp circuit. |
Great point, dadoes - most people don't talk about that part of it! The other thing to consider is flow rate. Electric tankless water heaters pass water through/past elements that heat the water so you'll need to know what gpm will be passing through your heater at any one time. If it's a point of use heater, this is easy - you just have one fixture to worry about. If the heater will be serving more than one fixture, combine the gpm of each fixture to determine your max flow rate. Then check for a heater that will accomodate that flow rate at the output temperature that you want. There's a few more details to iron out, but that'll get you to a point where you can start weeding out what won't work for you. |
Ty all for your feedback! It did help me make my decision to go w/ a larger electric WH. Now down to the question of brand?! |
Please Note: Only registered members are able to post messages to this forum. If you are a member, please log in. If you aren't yet a member, join now!
Return to the Plumbing Forum
Information about Posting
- You must be logged in to post a message. Once you are logged in, a posting window will appear at the bottom of the messages. If you are not a member, please register for an account.
- Please review our Rules of Play before posting.
- Posting is a two-step process. Once you have composed your message, you will be taken to the preview page. You will then have a chance to review your post, make changes and upload photos.
- After posting your message, you may need to refresh the forum page in order to see it.
- Before posting copyrighted material, please read about Copyright and Fair Use.
- We have a strict no-advertising policy!
- If you would like to practice posting or uploading photos, please visit our Test forum.
- If you need assistance, please Contact Us and we will be happy to help.
Learn more about in-text links on this page here


text:
You are visiting our UK site. Click here to view our US site
A Manual of Acupuncture Point Cards
Publisher: Journal of Chinese Medicine
The companion card set to A Manual of Acupuncture. This set has now been enlarged to include all the points discussed in A Manual of Acupuncture in a fine hardwearing box. Each card has one or more illustrations and point locations on one side and the distilled essence of the textbook on its reverse. The cards are ideal for student revision and quick reference in the clinic. Additional cards cover point categories, cun measurements and terminology.
Weight (including packaging): 2150g
Tax is not applicable to those living outside the European Economic Community. For more info click here.
99 in stock
Now: £50.00 (£60.00 inc. tax)
Was: £57.50
Save: £7.50
Saved: 13.04%!
Save: £7.50
Saved: 13.04%!
Related Products:
A Manual of Acupuncture, 2nd edition
by Peter Deadman & Mazin Al-Khafaji with Kevin Bak...Price: £69.00 £80.00
[more info]
People who purchased this also purchased...
A Manual of Acupuncture, 2nd edition
by Peter Deadman & Mazin Al-Khafaji with Kevin Bak...Price: £69.00 £80.00
[more info]
Sharpak Sharps 18 Plus 1.58 Litre
Ideal for the busy acupuncturist, the Sharpak Shar...Price: £2.50 £4.99
[more info]
Acupuncture and IVF: Increase IVF Success by 40-60%
by Lifang LiangPrice: £16.00 £21.00
[more info]
The Essential Guide to Acupuncture in Pregnancy and Childbirth
by Debra BettsPrice: £31.50 £35.00
[more info]
Treatment of Infertility with Chinese Medicine, 2nd edition
by Jane LyttletonPrice: £44.09 £48.99
[more info]
Subscribe To CMT
Shopping Basket
Your basket is empty!
Change Language
Change Currency
Events Calendar
Auriculotherapy Seminars - The 2014 UK Weekend Workshops with Jim Chalmers
A brief history of Ear Acupuncture, Anatomy and Enervation of the Ear, Techniques to locate active points, Prioritisation of point selection, TCM integration... [more]
Master Tung Acupuncture with Philip Weeks (22nd/23rd January 2015)
Tung Acupuncture is well known for its quick and spontaneous results... [more]


text:
Have you ever read a great book, seen an inspiring movie, or heard a great joke, and thought, "I've got to share that!" Of course you have! Here are a few things from my Reader in the last week (or two) that inspired and motivated me, made me happy, sad, and angry, made my stomach growl, and made me laugh.
Other than the picture above and the race announcement, Turkey Trot has nothing to do with this post. I've been writing the Weekly Reader for more than a year, always subtitling it with a phrase using the word inspiration. I think I may have run out of my own inspiration, for titles that is. It is probably time to move on to another phrase. In the meantime, here is what inspired me this week.
Vegan Inspiration
Notes from the Vegan Kitchen, Lobster Mushroom and Corn Chowder with White Bean "Cream." I love corn chowder. Bryanna's version sounds (and looks) amazing.
Healthy. Happy. Life. Easy Vegan Almond Cups. Just because I don't eat sweets very often (because they're rarely vegan), doesn't mean I don't like them occasionally. Kathy's version of this chocolatey treat makes my mouth water.
Oh She Glows, Vegan Thanksgiving Recipes for Every Course. Angela has put together an amazing resource to help you prepare a cruelty free Thanksgiving Dinner.
Running & Fitness Inspiration
Tina Reale, 20 Ways to Mix Up Your Strength Training Routine. If you like variety in your workout routine like I do, you'll love Tina's ideas to keep your strength training routine interesting. Variety is good for the mind and the body!
Fun & Fit, 5 Ways to Create Permanent Lifestyle Change. Did you know there are five key steps to changing habits? Kymberly and Alexandra do. Here they explain the steps you must go through to create make permanent lifestyle changes.
Run to the Finish, 7 Boredom Busting Treadmill Workouts. If you follow Amanda's training, you know that some of her longer runs have been relegated to the treadmill lately. Here are some of her great ideas how not to go mindlessly crazy while running on a treadmill.
Blogging Inspiration
Hubspot, You Don't Want Your Face Plastered All Over Google? You Have a Few Options. Did you know that Google changed their terms of service and may start using your face in their advertising? What? You missed that memo? Then you better read this.
Jennifer Grayeb, Protect Your Blog from Hackers. Has your blog been hacked? It is not fun, and it can be expensive to fix. Here are some great tips from Jennifer to protect your WordPress blog from hackers.
Blogelina, How to Monetize Your Blog the Right Way. Do you want to make money from your blog? Here are some tips from Tanya on how do get started.
Food for Thought
Run Wiki, 12 Reasons Why We Run. Those of us who run pretty much know why we love it, but it's fun to read Lisa's list and nod your head in agreement.
Truth2BeingFit, Are you Fat? Is This Fat? Are you sick and tired of the media creating ridiculous standards of body weight expectations? If you are, you will enjoy Jody's rant.
Fit, Feminist, and (Almost) Fifty, Cross Fit, Crotch Shots, and Respect. A thought provoking post from Sam on Cross Fit and their respect (or lack of it) for the female athletes who represent the sport.
Hyperbole and a Half, Menace. I am always so happy to see an H & H post pop up in my reader that I have to share it.
Cotter Crunch, Why is it so Hard to Compliment Women? It's true isn't it? We have a hard time accepting compliments. Lindsey asked the thought provoking question and started a great conversation in the comments.
Now it's your turn! Have you read (or written) something inspiring that you'd like to share?


text:
Final Thoughts
BFG Tech have done an excellent job with this card, most of the time when you look for a video card that has a cooling solution as good as this we find ourselves taking up multiple slots in the case. BFG Tech has managed to output these cool numbers while still only using a single slot design.
The overall quality and design of the heatsink fan setup is excellent and it feels simply top notch. There really isn't much more you could ask for in an aftermarket solution. Sure we understand that you pay a price premium but not only do you get this exceptional cooling solution but also the pre overclock which helps in some places more than others, as well as a lifetime warranty.
If you're looking for an 8600GTS that packs a bit more punch than the normal run of the mill 8600GTS and cools quite a bit better (which in turn helps us achieve an even better overclock from the extra headroom), this could be the card for you. Sure we understand that it's more expensive but the quality of the product and the extras that BFG Tech offer really help justify the cost of the card.
The most interesting thing we have to wait for now is how the HD 2900 PRO goes and what price it comes in at. The 8600GTS is really in a bit of an uncontested area at the moment but this is about to change with the release of the HD 2900 PRO, so if you're not in a huge hurry it's probably worth waiting the extra few weeks to see what exactly AMD can bring to the table before you throw your hard earned dollars on a mid-range graphics card.


text:
Get full Not fat
(9 Recipes) Created by PEACEVANN
Recipes in this Collection
This recipe has been marked private.
A refreshing alternative to tuna salad. Pair with tomatoes and cucumber for a light lunch. Submitted by JLPNURSE Carbs: 20.4g | Fat: 4.1g | Fiber: 6.1g | Protein: 27.6g | Calories: 219.1
Use with a bag of pre-shredded broccoli & cauliflower; makes this recipe super quick. Submitted by PBERGER3 Carbs: 6.2g | Fat: 2.6g | Fiber: 0.9g | Protein: 2.3g | Calories: 60
This tastes just like cheese pizza! Pair this with a salad and you have a great pizzeria style lunch without the calories attached--or the bill. Submitted by PUNKGIRL213 Carbs: 26.3g | Fat: 8.3g | Fiber: 4.4g | Protein: 15g | Calories: 242.3
Garlic is good for more than keeping away vampires. It's also quite good for you and full of flavor. Roasting garlic mellows its flavor and gives it a creamy texture. Submitted by CHEF_MEG Carbs: 2.8g | Fat: 1.6g | Fiber: 0.3g | Protein: 0.5g | Calories: 26.1
Most pasta salads are heavy on the pasta and light on everything else. This version, which can be served warm or cold, includes a hefty portion of vegetables--both spinach and tomatoes. Submitted by CHEF_MEG Carbs: 33g | Fat: 8.9g | Fiber: 2.6g | Protein: 12g | Calories: 267.2
This is a great recipe when the garden is overflowing. Submitted by CHEF_MEG Carbs: 17.3g | Fat: 0.8g | Fiber: 3.3g | Protein: 2.7g | Calories: 77.3
These tasty roasted vegetables can be cooked on the grill or roasted in the oven! The pineapple adds a wonderful sweetness to the vegetables. Submitted by HONEYLEA Carbs: 17g | Fat: 7.2g | Fiber: 2.8g | Protein: 2.3g | Calories: 136.5
I love Chili's Southwestern Eggrolls. They have so much tasty stuff in them, but I hate the fact they are deep fried. I added more beans and corn and then put them in the broiler for crunch. Submitted by RONDARC Carbs: 36.4g | Fat: 17.1g | Fiber: 9.1g | Protein: 18.6g | Calories: 359.7


text:
Hello, New England gardeners,
It's been a long time since I posted to this list - at least 5 years, I think. (I used to hang out here quite a bit, and I had the good fortune to meet some of you at a plant swap at Idabean's house - still have lovely plants from that swap, and good memories of meeting people and touring Idabean's beautiful gardens.) I came back today and was happy to see both new and familiar names. It's always a pleasure to read the posts here. Just wanted to say hello; I hope to be back more. Meanwhile, I'm excited about snowdrops, hellebores, witch hazel (my workplace put in a whole avenue of it last fall!) and winter heath. This is such a great time of year for noticing the smallest changes in the garden - Amanda |
Follow-Up Postings:
- Posted by prairiemoon2 zone 6a/MA (My Page) on Wed, Mar 16, 11 at 13:01
Hi Amanda, Nice to see you visiting. I still have Iris that you gave me at that swap. :-) Glad you are enjoying your spring garden. Mine was under so much snow, it's just starting to wake up. A few crocus blooming and that's all so far. Hope you will post some photos of your garden. Welcome back. :-) |
- Posted by asarumgreenpanda z6 MA (My Page) on Thu, Mar 17, 11 at 10:25
Hi PM2 - how nice to see you. I have a 'Good n Plenty' begonia from a cutting you gave me. I'll be moving at the beginning of June, so the parts of my garden that are currently active (and that I like) are in pots. I'll try to post some pictures of potted-up hellebores - probably not until the weekend, though. Amanda |
- Posted by prairiemoon2 zone 6a/MA (My Page) on Thu, Mar 17, 11 at 12:25
I still have my original. Angel wings are so easy, that's what I like best about them, I think. Glad your 'Good n Plenty' cutting worked out. Are you moving locally? I guess you will be potting up a lot to take with you. I hope you will have a great spot for a new garden in your new place. |
- Posted by diggingthedirt CapeCod Zone7ish (My Page) on Fri, Mar 18, 11 at 13:24
Hi Amanda - There are still a few of the old regulars here who were at Marie's swap. So nice to see you here again! |
- Posted by asarumgreenpanda z6 MA (My Page) on Fri, Mar 18, 11 at 19:40
Hi, N/DtD - great to see you. Hydrangeas you gave me have thrived. I've really enjoyed them. A, I'm moving locally, yes. I'll be moving to the middle of the city, which is great, as far as I'm concerned, but which does mean I'll have a lot less in-ground gardening space. There are some bathtub-sized areas beside the front door. They face SOUTH SOUTH VERY SUNNY SOUTH, so I think my favorites, the hellebores, will have to go in my parking spot! (It's around the back, in shade.) There's a little room around the parking area; I'll try that, first. I'm only bringing "a few" special plants with me - "a few" being sort-of relative, here, to how many plants I have, rather than meaning, actually, something like 2-5 :) . I'll be living on the top floor, and will build a roof deck one of these days/years. I'm really looking forward to the roof deck. I love container gardening, and I come from a family of roof-gardeners. My Good n Plenty was in too bright sunlight for a decent photo when I got home today, but here's a (not particularly decent) photo of another begonia, Madame Queen. Please excuse those dried-up-and-fallen-off Hatiora flowers on my plant shelf. Why do we not see these things until after taking the photo? Amanda |
Hey! I haven't checked in here in quite a while and it's delightful to see your post. Do you remember the chickens and the chicken-catching escapades at my swap? They got rid of the chickens because a horse got samonella and was very ill. I'd love to have chickens here but no time and less energy than awhile ago. Thanks for the saying something nice about my garden. Now almost half the back hill is planted with "real" plants, not trashy norway maples. I really have to stop planting . Maybe if I hosted a plant swap, you'd come! Great to see your name, Amanda. I knew exactly who asarum was after all these years Marie Marie |
- Posted by prairiemoon2 zone 6a/MA (My Page) on Sun, Mar 20, 11 at 7:03
Amanda, that's a very attractive Begonia. I don't think I've seen that variety before. I do remember you always had an eye for container plants and displaying them. I trained my 'Good 'n Plenty' into a standard that I enjoyed for two years and I lost it last year. Luckily I had taken cuttings from it just before that and now I'm starting over again. Our daughter lives in the city and they have a roof deck on her building. She is not on the top floor and it's a couple of flights to bring anything up there. She would enjoy growing something on the roof, but she really doesn't have a lot of time. I was considering giving her a container of succulents this summer. There is no access to water up there, so I really wonder how much gardening you can do without a lot of vigilance. The light is so strong and with no shade at all, I imagine everything dries out really fast. It sounds like a really fun project for you and lucky that you will have a full sun area outside to work with too. So many things you will be able to grow. |
- Posted by asarumgreenpanda z6 MA (My Page) on Tue, Mar 22, 11 at 1:13
Hi Marie - it's as delightful to see you posting. Is it possibleNOT to say something nice about your garden? It's so, so lovely. I'm afraid I only vaguely remember chickens. I remember meeting people from the forum. I remember spilling coffee (by accident!) on PrairieMoon2, who was wearing a shirt with a lot of white in it. And I remember a plant combination you had - asarum europaeum planted under/in front of taxus. I loved the similar colors but contrasting texture and sheen. One day I hope I"ll have an occasion to copy that planting, but, meanwhile, I think of it. I'm sorry to hear about no time and less energy; I hope the time goes in ways that are satisfying, at least. PrairieMoon2, the standard sounds really interesting. I've tried that with coleus, but never with a begonia. Now you've inspired me: something to try this summer. Perhaps a cutting of 'Madame' can find its way to you? Succulents are a smart idea for a roof garden. Mine doesn't have water, either, at the moment, and I'm still thinking about how to resolve that. (I'll try to put it in, but I think it's a little tricky in a condo set-up.) I imagine there will come a time - fairly soon - when getting a workout by lugging water up to the roof gets, oh, I don't know...a bit old? :) Whatever I do, I imagine I'll use self-watering containers. Amanda |
- Posted by prairiemoon2 zone 6a/MA (My Page) on Tue, Mar 22, 11 at 13:34
I hadn't remembered the coffee, Amanda. It's funny the things we remember. I do remember the huge, gorgeous planting of asarum that Marie has in her garden that she very generously offered me a division of. I still have it under my Maple tree. Thank you again, Marie. :-) As lovely as that begonia is, I think it would be happier at your house, with someone who will take good care of it, (g) but thank you for the generous offer. I find myself simplifying my houseplant collection to only those that will suffer the most neglect. I hadn't thought of a 'self watering container' for the roof, great idea. She has a birthday coming up soon, that will be a great gift idea. Thanks. :-) |
Please Note: Only registered members are able to post messages to this forum. If you are a member, please log in. If you aren't yet a member, join now!
Return to the New England Gardening Forum
Information about Posting
- You must be logged in to post a message. Once you are logged in, a posting window will appear at the bottom of the messages. If you are not a member, please register for an account.
- Please review our Rules of Play before posting.
- Posting is a two-step process. Once you have composed your message, you will be taken to the preview page. You will then have a chance to review your post, make changes and upload photos.
- After posting your message, you may need to refresh the forum page in order to see it.
- Before posting copyrighted material, please read about Copyright and Fair Use.
- We have a strict no-advertising policy!
- If you would like to practice posting or uploading photos, please visit our Test forum.
- If you need assistance, please Contact Us and we will be happy to help.
Learn more about in-text links on this page here


text:
Primary Navigation
Secondary Nav
Ballet is an art from like no other. Insight into what happens behind the scenes can be a great way to gain a brand new perspective.
Behind the scenes photos.
Keiichi Hirano and Artists of the Ballet in ballet class.
Rebekah Rimsay applying make-up for The Sleeping Beauty
The making of a tutu.
David Brisken in rehearsal with the National Ballet Orchestra.
Heather Ogden waiting in the wings.
Before a ballet is ready to be performed on stage, hundreds of hours of work take place behind the scenes.
Ballet dancers are a very elite group of athletes. They train for many years before becoming professional dancers and once they join a company their training does not end. Dancers' bodies need to be extremely strong and flexible to execute the demanding technique of ballet so they must practice and rehearse every day to keep their bodies in top physical condition. In daily ballet class, rehearsals and performances, a dancer's body is pulled and stretched in many different directions. When executing grand leaps and jumps, their feet, knees and backs are subject to further abuse by landing on very hard concrete floors. As a remedy, most dancers dance on specially constructed dance floors to absorb the impact of jumping. For every minute of dancing you see on the stage, there has been an hour of rehearsal.
The setting of the stage in a ballet helps to evoke the time, place or atmosphere of the production. All of the sets, scenery and props used by the National Ballet are made at the company's production workshop, a large building the size of an airplane hanger. From the initial drawings made by the set designer, scenic artists, carpenters and electricians work together to bring the setting to the stage. Lighting design is then added to enhance various aspects of the production.
Often the same person who designs the setting of a production will also design the costumes. The designer will start with a drawing of what they think the costume will look like and then the National Ballet's wardrobe department will make a pattern, choose material, sew it together, decorate the costume and finally fit it on the dancers. Ballet costumes have to be carefully reinforced so that the dancers can move easily in them and not worry about them coming apart while they are dancing.
Chris Read making costumes for Swan Lake. Photo by Cylla von Tiedermann.
When performing in a theatre, the National Ballet must transport all of its own equipment to the location including wigs, costumes, sets, props, lighting equipment and the specially designed dance floor. Many of these items are packed in wooden crates to keep them from being damaged during the trip. Very delicate items like tutus are packed in wicker hampers called "skips" for transport. All of these items are loaded into tractor-trailers and shipped to the theatre where they are stored backstage. Often items from several different ballets live backstage until it is time for the ballet to be performed.
When dancers rehearse in the studio a pianist plays the music for them. It is usually at the dress rehearsal that the dancers hear the orchestra for the first time. It is also at the dress rehearsal that the dancers have their final opportunity to try on their costumes, work with the props and scenery and practice the steps on the stage. Everyone's hard work is rewarded the moment the curtain rises and the ballet begins.
Artists of the Ballet from the wings. Photo by Bruce Zinger.
Female ballet dancers are able to stand on the tips of their toes by wearing a special shoe called a pointe shoe. Each dancer at The National Ballet of Canada is specially fitted for their pointe shoes and have their shoes made perfectly to fit their feet.
The shoemaker uses a mold of the dancer's foot size and then places layers of glue and canvas over the mold to make the toe area into a "box" to support the foot. The shoe is then hardened in a very hot oven and finally covered with pink satin. The sole of the shoe is made of hard leather which prevents it from bending too freely, and also helps to support the feet as the dancer rises up and down off their toes.
To keep the shoe on securely, the dancers sew satin ribbons to the sides and tie them tightly around the ankles. The dancers also cut the satin off the tips of the toes and apply rosin (a powdered substance also used by stringed instrument players and baseball players) to the tip and bottom of the shoe so they do not slip on the dance floor.
When the dancer gets a new pair of shoes, they are very hard and would be uncomfortable and noisy to dance in. So the dancers spend time breaking in their shoes by gently hammering them or wedging them in a door frame. Wearing new shoes for ballet class and in rehearsals can also help to soften them to be more comfortable for a performance. When dancing, sweat and body heat soften the shoe even more, to where it can no longer support the dancer's foot. Pointe shoes generally last a maximum of eight hours, depending on the difficulty of the choreography, however some dancers can go through one pair of pointe shoes in a single performance.
Professional dancers have spent 8 to 10 years training to perform on pointe and have built up calluses on their feet to prevent excessive discomfort. Some dancers choose to cover their toes with lambs wools or toe tape to protect their feet from uncomfortable blisters.
Male dancers typically do not wear pointe shoes. They wear canvas ballet slippers or special ballet boots made of leather that are flexible enough for them to move and jump in.
Watch video of Princial Dancers Heather Ogden and Greta Hodgkinson on their pointe shoes
We highly recommend the following resources to learn more about The National Ballet of Canada and dance in general. These and many others are available in many books stores and local libraries.
It is a type of stylized dancing involving a specific technique.
Most dancers study ballet for 10 or more years and then audition to join a company. Dancers often audition for many companies around the world to find the company that best suits their style and technique.
They practice exercises in daily ballet class to stay in shape. After ballet class they spend up to 6 hours each day in rehearsal learning dances taught by choreographers.
Children who take ballet lessons sometimes are asked to dance small roles with professional companies in such ballets as The Nutcracker. Some ballet schools have annual recitals in which all the children get to perform. But to be a professional dancer, students must study in a professional school until they are 17 or 18 years old.
No. Every year more and more boys are taking ballet lessons. Ballet dancers are elite athletes and to dance at a professional level requires great co-ordination and strength. Today's choreography features many exciting roles for male dancers to show off their athleticism and power. Male dancers must learn to partner female dancers and to lift them and make it look beautiful and easy. Many male dancers do special weight-lifting programmes to develop their muscles in the chest, back and arms. This helps them with partnering and prevents injury.
In some respects, it is. Women dance in pointe shoes on their toes. They perfect delicate but strong movements through years of rigorous training to develop and strengthen their leg and foot muscles. Men, on the other hand, work on jumps, turns and the partnering of women.
No, they don't get dizzy because they are taught a trick called "spotting." Before they turn, they choose something on the wall, or somewhere else in front of them, to look at — a clock, a door, a light — and they try to keep looking at it as they are quickly revolving around and around.
Yes, injuries are a constant threat to a dancer's career. Injuries do not occur only from falls. Dancers must take class every day to keep their muscles strong, loose and warm, and their bodies flexible. They put rosin powder — the same rosin that's used on violin bows — on the bottom of their shoes to keep from slipping. Even with all of these precautions, dancers injure their backs, necks, shoulders and knees, pull muscles, sprain ankles, twist joints and break bones.
Dancers practice in a large room called a studio, which has mirrors on the walls so the dancers can see what they are doing. There are wooden or metal rails attached to the walls called barres. The dancers usually perform warm-up exerices while standing at the barre and holding on to it with one hand to keep their balance. Ballet class and rehearsals are accompanied by a pianist.
Story ballets such as Giselle, Don Quixote, The Nutcracker and Swan Lake are straight narrative works told through dance and mime. Dramatic ballets also usually follow a narrative or have a literary source. Story and dramatic ballets must be detailed in structure, with exact pacing and build-up of dance and dramatic effects.
Abstract ballets have no story but are mood pieces in which the movement and patterns are the focal point. Abstract ballets have come to the forefront in the 20th century. The first such ballet was Les Sylphides, created by Michel Fokine in 1908. Fokine, and many choreographers since, created ballets for the sake of movement and mood alone, with no specific plot. Don't look for a story in these ballets, because there isn't one. Audiences can just sit back and enjoy the ballet and let their emotions and mental images be stirred.
The Corps de Ballet is the backbone of a ballet company and performs in all the large group sections of a ballet. The female Corps de Ballet in many classical ballets must be very well rehearsed so they can maintain symmetrical lines and perform in perfect unison.
A dancer who excels in the Corps de Ballet may be promoted to a Second Soloist and be asked to perform smaller group dances and some solo roles.
Demonstrating their talent and strength as a Second Soloist, can lead a dancer to being promoted to First Soloist. As a First Soloists, dancers are given more solo roles to perform and are groomed for principal roles.
When a dancer has reached a certain level of technical ability and artistic maturity, they are promoted to Principal Dancer, the highest ranking of dancer. Principal Dancers perform starring roles in a company's repertoire.
Most dancers stop dancing between 35 and 40 years old. Sometimes a dancer may have a specific injury that has forced them to stop dancing and sometimes their bodies are just tired from all the physical strength that is required for ballet. When most adults are settled into their careers and are financially secure, retired dancers have to go through a career transition. Some dancers remain in the profession as teachers, choreographers or artistic directors. Others find new careers as photographers, actors, writers, doctors, lawyers, massage therapists and psychologists.
Do you have more questions about ballet? Please email us at firstname.lastname@example.com and we will be happy to answer them.


text:
Northbrook Wedding Venue
1150 Willow Road
Northbrook, Illinois 60062
Contact: Event Sales
Phone: 847/480-2323
Request more information
Book a Friday night wedding and receive 10% off food & beverage.
5 reasons you'll be bowled over by Pinstripes Northbrook:
1. With 18 bowling lanes, 6 bocce courts, and banquet rooms for 20–600, this site brings fun to every event!
2. The large, year-round patio with fire pit lets your guests relax outdoors after all that bowling.
3. A sophisticated Italian-American bistro with an impressive wine cellar makes up the other half of this unique venue, with gourmet menus for breakfast, lunch and dinner.
4. Catering and party packages accommodate a variety of event needs and budgets, and all wedding packages include a champagne toast and 4-hour bar.
5. The experienced event staff will tailor your celebration to your vision, from specialty linens and party favors to a customized cake! Two other Pinstripes are conveniently located nearby in South Barrington and Oak Brook, too.
Wedding Packages range $55–75/person. Special children's rate ranges $40–60/child. Sales tax and 20% service fee is additional.
Wedding Receptions
Special Events, Parties
Rehearsal Dinners
No View
Wheelchair Accessible
Available year-round for lunch and dinner. Please contact the Event Sales Team for open dates.
Alternate Info: Pin Stripes


text:
Svchost.exe virus which I just can't get rid of
Add New Comment
TechSpot Members
Login or sign up for free,
it takes about 30 seconds. |
You may also... | |||
Get complete access to the TechSpot community. Join thousands of technology enthusiasts that contribute and share knowledge in our forum. Get a private inbox, upload your own photo gallery and more.


text:
Well, I called and made the reservations today for my trip for August 10th-17th! I am taking my mom along with me and possibly a friend. This is my favorite time of year to go (especially Aug/Sept.) as the crowds are lower. I would have liked later in the month, but that wasn't very doable this time; still I think the crowds will be manageable.
We're staying at the Royal Plaza (soon to be "B Resort") in DTD again because of a very good rate, for one. As I mentioned somewhere else, this hotel is being renovated, but I was told the area I booked (17th floor DTD view) would be completed along with most of the hotel by then as work has been ongoing. I will definitely let you all know what I think of this hotel's update after my trip.


text:
About Me
You can also find me writing about casual dating and sex on NoStringsDating Blog. Along with several of my extremely talented peers, I've been featured in Brazilian Glamour as one of the top 100 sex bloggers worldwide (I'm towards the bottom, but dammit, I'm there). You might say I really get around.
If you're interested in my "safe for work" adventures, please follow me on Instagram and Tumblr. You'll see a lot of pictures of my 12-year-old rescue dog, Daphne, who enjoys wearing sweaters and using her 6 remaining teeth to tear into her beloved chewies. My husband is the guy who sort of looks like Ryan Gosling, if Ryan Gosling had a PhD instead of a gym membership.
You can contact me…
On Twitter!
On Facebook!
On Instagram!
By e-mail!


text:
Results 1 to 2 of 2
I am thinking of buying Mandrake Linux but i also want to put Kazaa on it as well as program with C++. I like Bloodshed's Dev-C++ programmer and was wondering ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
- 12-21-2003 #1
- Join Date
- May 2003
- Posts
- 12
What C++ compiler runs on Linux
- 12-21-2003 #2
- Join Date
- Oct 2001
- Location
- Täby, Sweden
- Posts
- 7,578
Well, I don't really think that you have to worry about that, since all Linux distributions ship with the best compiler in the world, GCC. Just remember to install it, since it doesn't install by default.
I think that what you're looking for is a development environment. Technically, that's no problem either, since all Linux distributions come with both emacs and vi (and pico, gedit, nano, joe, ad infinitum). Those two are really good. Personally, I really prefer emacs (see here) over vi, but that's really mostly about taste. The thing is, that these don't really quite work like the Windoze programs that you might be used to. If you give them an honest chance, though, I have no doubt that you too will find them completely superior.