6
$\begingroup$

I'm designing a city at the moment and I want residential construction to follow an iterative design. Houses are made of connecting hexagonal rooms.

Families grow very large in my city due to some unrelated social things and construction is often done by residents. So the rules need to be simple enough to be understood by the general population and executed using only ruler and compass, in a reasonable amount of time(no huge algorithms that need a computer to execute). This ruleset needs to leave a minimum of 2 meters of space between houses(for walking and cycling). There can be no collisions, overlaps, or entrapments(a slow growing family shouldn't get trapped by their faster-growing neighbors).

The only solutions I've come up with result in an incredibly regular and boring city and can't handle irregularities of any form. I want my city to have an organic/fractal quality to it.

$\endgroup$
10
  • 3
    $\begingroup$ Why hexagons? Are the hexagon rooms all the same size? They are harder to manage than rectangles, especially with your 2 meter travelers' commerce requirement. The best I can offer is a set lot size or shape with borders built in for travelers, though it is a bit boring. $\endgroup$
    – Marion
    Commented Jun 10, 2016 at 0:32
  • $\begingroup$ The hexagon thing is religious. The rooms are the same size. If i can't figure something out, i'll probably use a regular grid. Easier and more practical, but not nearly as beautiful. $\endgroup$ Commented Jun 10, 2016 at 0:37
  • 1
    $\begingroup$ What is your design environment and what is this for? A hexagonal hive-like structure will always have elements of the same size, otherwise it will leave holes. Rectangles allow you to set up rooms differing in size (each dimension separately even), allowing not only for room count and allocation order to be the only customization vectors in terms of basic structure. $\endgroup$ Commented Jun 10, 2016 at 6:44
  • 2
    $\begingroup$ Are rooms demolished when a familly becomes smaller (children leaving, grand-parents dying, etc.) ? This could give a more dynamic look to your city. Also what materials are used? Can these be recycled/reused/composted ? Can people build upwards? Are the inhabitants humans? $\endgroup$ Commented Jun 10, 2016 at 7:55
  • 2
    $\begingroup$ Second, to your post. I sorta feel that you want two exclusive things, I don't know that you can have prefab, likely algorithmically placed buildings AND have an organic/fractal quality $\endgroup$
    – James
    Commented Jun 10, 2016 at 13:37

5 Answers 5

6
$\begingroup$

The reason your design comes out boring is the rules you've put in. A city is organic, most of the old "interesting" cities had the strangest of rules. Amsterdam houses were taxed by width. In Paris the balconies had to align. In old walled cities there was incentive to stay within the safety of the city walls, so you swap space for safety and build small.

If you introduce some arbitrary esthetic rules rather than logical ones, you'll get a more organic system. Lose the enforced gap between every property in favour of a hexagonal road network for example. This means that as people overexpand their plot due to family size, they have to move to a new plot with more room to expand.

Land is more expensive in city centres, people will build up on a smaller footprint rather than out. It's cheaper to build out away from the city, but as the city expands you'll get big old out-of-town houses now in the centre surrounded by small high density housing.

This will allow a build up of small properties in the city centre and larger ones in the suburbs but with occasional oddments like old country mansions near a town centre (see Lauderdale House or Buckingham Palace as examples of this effect.)

New properties will build up along existing roads before new roads are built, so major routes will have longer blocks of larger houses set in more land, then minor roads will build up with smaller blocks of smaller houses as the land value goes up.

Things to do:
Introduce areas where people want to be: This causes higher density more expensive housing.
Introduce areas where people don't want to be: This gives higher density low value housing (slums), maybe even make these square, that way they'll stand out as cheap housing. Then regeneration will have hexagonal housing in square plots.
The suburbs: Slightly boring, property value linked to plot size.
Add noise: Rivers, parks, lakes and reservoirs as well as topography.

In summary: Strict rules make boring cities.

$\endgroup$
3
$\begingroup$

Add noise. If your terrain is uniform, the city will be also. Run a Perlin or Simplex noise generator across the map first, creating locations that can't be used because they are to high or too low. You could also impose 'open space' ordinances that require 1 hex left open for every 3 built. You could have superstition that some percent follow and will never connect to a specific hex edge number. You just need to allow for some randomness.

On organic design, look into L-systems. Set your roads first, run random distances, then either place a fork(Y) or shoot off a smaller side street, or a building lot. Each iteration you either continue growing the roads at endpoints or building houses at lot points.

A search on Procedural Road generation will give you lots of research people have done, you just have to apply it to your system.

$\endgroup$
5
  • $\begingroup$ I really like the idea of combining a lifted regular hexagonal grid of roads(for the distribution of goods) with a ground layout generated by L-systems based fractals. Though making them without computers can be a bit tedious. $\endgroup$ Commented Jun 10, 2016 at 12:58
  • 1
    $\begingroup$ Speaking of noise: parks and a river $\endgroup$
    – Separatrix
    Commented Jun 10, 2016 at 13:00
  • $\begingroup$ Absolutely. A city is really only about 50% residential. The rest is services& food, ,merchants,open space, civic(including roads). Adding different building types gives the roads a place to go and a reason to go there. $\endgroup$ Commented Jun 10, 2016 at 13:06
  • $\begingroup$ If you are working pen and pencil (dice?) then you just have to build chances and tables that follow the same rules. The noise functions are probably to complex to implement w/out a computer thought. $\endgroup$ Commented Jun 10, 2016 at 13:10
  • $\begingroup$ Don't really need a computer. Draw a map with terrain features. Pick some spots that look cool and then build them up, connecting them by convenient roads. Build up further until they interact. (You can use stuff like parks and non residential structures as you go, of course, and likely should.) Unless they just happen to fit each other, you just inject some arbitrary perturbations for aesthtetic reasons. $\endgroup$
    – The Nate
    Commented Jun 10, 2016 at 18:37
2
$\begingroup$

There are many software programs that specialize in procedural generation of cities; like this one: https://youtu.be/yI5YOFR1Wus I would survey a bunch of them, either to find one to use, or try to figure out what they are doing that you like. Otherwise as the person above said, try the math board.

$\endgroup$
1
  • $\begingroup$ That is some spiffy software. $\endgroup$
    – The Nate
    Commented Jun 10, 2016 at 19:02
2
$\begingroup$

Just apply the rules you have, but apply them organically.

Split the map into hexes, each the size of room. Put the "roads" around the hexes as well.

Scatter "seed points" around the hexes to be your starting point.

Use a random number generator from 1->X+1 where X is the number of occupied hexes to generate a number.

If the number matches a family it expands. They pick an empty adjacent hex and expand into it (color it in their color) and fill in the road between those two hexes. Note that if any hex they occupy get selected they can grow their building from anywhere, not just from that hex. If there are no empty adjacent hexes they grow upwards - one of the hexes becomes 2 story (or 3 or whatever).

If x+1 is rolled then a family has split, pick a new point and fill it in a new colour.

In general have buildings expand away from their nearest neighbors rather than towards them and avoid encircling.

Stop when you think your settlement is populated enough.

This will give you an organic feeling city with buildings of different sizes, more crowded areas growing upwards, etc.

The algorithm as described will tend to favor larger families growing larger, so you will get more variation in sizes and it will tend to favor sprawling single story buildings.

If you prefer more uniform sizes you could select a random family to grow giving them all the same possibility.

If you prefer more height then you could stick with the first algorithm but require the growth to happen from the selected cell. The center of houses will then tend to rise even when the edges still have spaces to expand into.

$\endgroup$
1
  • $\begingroup$ This is a good answer. Not sure why it's getting dinged. Combined with the advice of adding terrain differences, this could look really interesting with only a modicum of processing. $\endgroup$
    – The Nate
    Commented Jun 10, 2016 at 18:26
1
$\begingroup$

To be terse, do a bee hive configuration.

What I mean is each family has an allocated lot size. This lot is a large hexagon with space for a set amount of rooms.

Now surround each lot with a 2 meter "road" for commerce.

In this way, each family is able to expand as needed, there will always be space for traveling between houses, and all houses are made of interlocking hexagonal rooms.

$\endgroup$
4
  • $\begingroup$ If I wanted to go the easy way I would have started with a regular grid. $\endgroup$ Commented Jun 10, 2016 at 1:00
  • 3
    $\begingroup$ Maybe you will have better luck with this question on the mathematical SE board. This is a math problem and they are better equipped to handle this type of abstract planning than I am. $\endgroup$
    – Marion
    Commented Jun 10, 2016 at 1:05
  • $\begingroup$ You're probably right. $\endgroup$ Commented Jun 10, 2016 at 1:22
  • $\begingroup$ Good luck with your question. I hope you find a great answer. $\endgroup$
    – Marion
    Commented Jun 10, 2016 at 1:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .