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.

$\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$
– MarionJun 10 '16 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$
– Bob HopeldorfJun 10 '16 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$
– InstantMuffinJun 10 '16 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$
– Babika BabakaJun 10 '16 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$
– JamesJun 10 '16 at 13:37

5 Answers
5

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.

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.

$\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$
– Bob HopeldorfJun 10 '16 at 12:58

1

$\begingroup$Speaking of noise: parks and a river$\endgroup$
– SeparatrixJun 10 '16 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$
– user2448131Jun 10 '16 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$
– user2448131Jun 10 '16 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 NateJun 10 '16 at 18:37

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.

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.

$\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 NateJun 10 '16 at 18:26

$\begingroup$If I wanted to go the easy way I would have started with a regular grid.$\endgroup$
– Bob HopeldorfJun 10 '16 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$
– MarionJun 10 '16 at 1:05