Reinder Stolte

Reinder Stolte

profile-pic
Hoeveel cirkels passen er in een vierkant wanneer de cirkels verschillende diameters hebben
Development

Bereken het aantal cirkels in een vierkant

7 juli 2022

Nederlands

Wanneer een diameter van een cirkel (of cirkels te samen) gelijk is aan de breedte of de lengte van een rechthoek (of vierkant) dan is het vrij eenvoudig te berekenen hoeveel cirkels er in een vierkant passen. Maar stel je nu eens voor dat er meerdere cirkels in een rechthoek (of vierkant) moeten worden geplaatst waarbij de cirkels niet allemaal gelijk zijn in afmeting en waarbij je graag een zo optimale indeling wilt realiseren binnen de rechthoek (of het vierkant).

Uiteraard is de voorwaarde dat er geen overlapping van snijpunten mag zijn.

Tijdens het ontwikkelen van planning software ontstond deze vraag. Hoe krijgen we gasflessen, met verschillende afmetingen, zo optimaal mogelijk geladen op een vrachtwagen of in een zogenaamde transportkooi.

Omdat de vraag niet veel voorkomt heb ik de functie, waarmee je dit kunt berekenen, als gratis API beschikbaar gemaakt. Feed-back is uiteraard van harte welkom.

English

When a diameter of a circle (or circles together) is equal to the width or length of a rectangle (or square), it is quite easy to calculate how many circles fit in a square.

But now imagine that several circles have to be placed in a rectangle (or square) where the circles are not all equal in size and where you would like to realize an optimal layout within the rectangle (or square).

The condition is, of course, that there should be no overlapping of intersections.

This question arose during the development of planning software. How do we get gas bottles, of different sizes, loaded as optimally as possible on a truck or in a so-called transport cage.

Because the question is not common I have made the function, with which you can calculate this, available as a free API. Feed-back is of course very welcome.

Endpoint

Het endpointadres is https://functionbase.nl/api/v2022/circle/rectangle [POST]

Model

Het JSON-model kent 3 lagen die zijn onder te verdelen in een vierkant, de details van het vierkant en de cirkels die je in het vierkant wilt positioneren.

  • Rectangle
    • Width – De breedte van het vierkant/rechthoek
    • Length – De lengte van het vierkant/rechthoek
    • Height – De hoogte van het vierkant/rechthoek
    • AllowStack – Mag er gestapeld worden (toekomstig gebruik)
    • Identitiy – Vrij veld voor de identiteit
    • External – Vrij veld voor een extern nummer
    • Details – Lijst met cirkelposities
  • Details
    • Row – Rijpositie
    • Column – Kolompositie
    • DensityType – Verplicht veld (toekomstig gebruik)
    • Stack – Stapelhoogte
    • ItemNotFit – Geeft aan of de cirkel past
    • Circle – Informatie over de cirkel
  • Circle
    • Name – Naam van de cirkel
    • Identity – Vrij veld
    • External – Extern nummer
    • Diameter – Diameter van de cirkel (verplicht)
    • Height – Hoogte van de cirkel (nog niet in gebruik)

Body voorbeeld request (JSON)

{
  "Width": 211,
  "Length": 115,
  "Height": 85,
  "AllowStack": false,
  "Identitiy": "",
  "External": "",
  "Details": [
	{
	  "Row": 0.0,
	  "Column": 0.0,
	  "DensityType": 0,
	  "Circle": {
		"Name": "",
		"Identitiy": "",
		"Diameter": 15,
		"Height": 47
	  }
	},
	{
	  "Row": 0.0,
	  "Column": 0.0,
	  "DensityType": 0,
	  "Circle": {
		"Name": "",
		"Identitiy": "",
		"External": "",
		"Diameter": 20,
		"Height": 47
	  }
	}
  ]
}
							  

Response voorbeeld

{
  "objectResult": {
	"width": 211,
	"length": 115,
	"height": 85,
	"allowStack": false,
	"identitiy": "",
	"external": "",
	"details": [
	  {
		"row": 30.029972485131996,
		"column": 151.7779693010317,
		"densityType": 0,
		"stack": 0,
		"itemNotFit": false,
		"circle": {
		  "name": "",
		  "identitiy": "",
		  "external": "",
		  "diameter": 15,
		  "height": 47
		}
	  },
	  {
		"row": 104.99354432591645,
		"column": 10.00337273797777,
		"densityType": 0,
		"stack": 0,
		"itemNotFit": false,
		"circle": {
		  "name": "",
		  "identitiy": "",
		  "external": "",
		  "diameter": 20,
		  "height": 47
		}
	  }
	]
  },
  "objectImage": "https://functionbase.nl/documents/01f4c928-0495-4a1e-a961-235a5473e6ed.jpg",
  "objectBestAreaRatio": 0.761446189735214,
  "objectFit": false,
  "statusCode": 200,
  "statusDescription": ""
}
							  

Response velden

  • objectImage – Link naar afbeelding van indeling
  • objectBestAreaRatio – Dichtheid van indeling
  • objectFit – Past alles in het vierkant
  • statusCode – Statuscode (200 = OK, 500 = ERROR)
  • statusDescription – Foutmelding bij code

CURL voorbeeld

curl --location --request POST 'https://functionbase.nl/api/v2022/circle/rectangle' \
--header 'Content-Type: application/json' \
--data-raw '{
  "Width": 211,
  "Length": 115,
  "Height": 85,
  "AllowStack": false,
  "Identitiy": "",
  "External": "",
  "Details": [
	{
	  "Row": 0.0,
	  "Column": 0.0,
	  "DensityType": 0,
	  "Circle": {
		"Name": "",
		"Identitiy": "",
		"External": "",
		"Diameter": 15,
		"Height": 47
	  }
	},
	{
	  "Row": 0.0,
	  "Column": 0.0,
	  "DensityType": 0,
	  "Circle": {
		"Name": "",
		"Identitiy": "",
		"External": "",
		"Diameter": 20,
		"Height": 47
	  }
	}
  ]
}'