{ "info": { "author": "Naimish Mani B", "author_email": "naimish240@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "The N-Body Problem\n\n what is it\n Newton tried to use analytical geometry to predict the planets' motions from its orbital properties (position, orbital diameter, period and orbital velocity) and failed\n realised that there is a gravitational interaction between the planets that is affecting their orbits\n In the solar system, every planet is gravitationally affected by all the other planets to some degree.\n This is also true for other bodies inside and outside the solar system\n it is easy to calculate the gravitationally interactive forces between two bodies using newtonian physics\n as soon as there are more than two bodies involved, things get harder to predict\n This technique is pretty close to reality -- the moon landings used newtonian mechanics to calculate their orbits -- but it has to be said that einstein showed that there are small micro-interactions between bodies that newtonian physics cannot predict\n\n why is it hard\n This is because every body's gravity influences all the other bodies orbital parameters, which in turn influence all OTHER bodies\n for n bodies, there are n^2 interactions to calculate\n you have to take all bodies into account, or your result will be very imprecise\n You can use this to find bodies you don't know about: Plug all bodies you know about into the equations, calculate, and if the result differs from reality, Boom, you know where to look for your new dark moon\n\n approximation using Barnes-Hut\n organise all bodies into an octo-tree (or quad-tree for 2d), ordered by their distance from each other\n each Body is a leaf on the end of the tree, and saves its mass, plus its orbital parameters\n save the combined mass of the attached bodies for each node\n for far away bodies, do not calculate every body's mass and gravitational interaction individually -- instead, with increasing distance, retreat further and further up the tree and use the mass information in the upper nodes\n it can be proven that due to the inverse square root relation of gravity to mass over distance, this only gives us very small errors as opposed to calculating every individual body\n However, the complexity sinks from O(n^2) to O(n log n)\n\nReference Code (java)\n\nhttp://physics.princeton.edu/~fpretori/Nbody/code.htm\n\nSources\n\nhttps://en.m.wikipedia.org/wiki/Barnes\u00e2\u20ac\u201cHut_simulation\nhttps://en.m.wikipedia.org/wiki/N-body_simulation\nhttps://en.wikipedia.org/wiki/Celestial_mechanics\n\nJ. Barnes & P. Hut (December 1986). \"A hierarchical O(N log N) force-calculation algorithm\". Nature. 324 (4): 446\u00e2\u20ac\u201c449. Bibcode:1986Natur.324..446B. doi:10.1038/324446a0.\n\n\nTroubleshooting:\n\nhttps://stackoverflow.com/questions/13316397/matplotlib-animation-no-moviewriters-available\nhttps://stackoverflow.com/questions/47736457/runtimeerror-no-moviewriters-available-in-matplotlib-animation?rq=1\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "CrudeBHT", "package_url": "https://pypi.org/project/CrudeBHT/", "platform": "", "project_url": "https://pypi.org/project/CrudeBHT/", "project_urls": null, "release_url": "https://pypi.org/project/CrudeBHT/1.0.7/", "requires_dist": null, "requires_python": "", "summary": "A simple implementation of the Barnes-Hut algorithm for N-body simulations in python 3.7", "version": "1.0.7" }, "last_serial": 5560268, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c3c3f957dcf8c77d1876ca4e9dcf69a1", "sha256": "b2da29f80fc11a1cc01338b3ee91346171ebd7bebff9484598f9b17ed0764a22" }, "downloads": -1, "filename": "CrudeBHT-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c3c3f957dcf8c77d1876ca4e9dcf69a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10477, "upload_time": "2019-07-20T10:07:22", "url": "https://files.pythonhosted.org/packages/39/0f/8e1af430f7208e1f88c6545adde0fd2820cd79d4b6fd6861b1686a690f62/CrudeBHT-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f6997ec325588394cbc90ea6eb7eebb", "sha256": "37489c3a04f1e8a937d642b9229655cbda10b0d1e37c719d96e6a13bedbb759b" }, "downloads": -1, "filename": "CrudeBHT-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8f6997ec325588394cbc90ea6eb7eebb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7420, "upload_time": "2019-07-20T10:07:47", "url": "https://files.pythonhosted.org/packages/94/e0/e3fb723a2ece0451ef5965051d3baa1adfaf45a99f51ebb6fa879afdd76d/CrudeBHT-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a4c46644637650fd201b2fd3601c07a5", "sha256": "89977504344637b4db9a13c0c05299c58ebaf169f6be0f3cae27640b0a826407" }, "downloads": -1, "filename": "CrudeBHT-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a4c46644637650fd201b2fd3601c07a5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10474, "upload_time": "2019-07-20T10:07:25", "url": "https://files.pythonhosted.org/packages/b3/03/03bcaea72ca561f13299bfa04c403e5dd42a4adad14cd8a5d074bebb98c9/CrudeBHT-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c6abe4ff1b3e85d93c87a6a815cab73", "sha256": "0611967799e11eb6ed1b423ddf9a6295e43a7bbeff346466c33f2c3e287f9968" }, "downloads": -1, "filename": "CrudeBHT-0.0.2.tar.gz", "has_sig": false, "md5_digest": "0c6abe4ff1b3e85d93c87a6a815cab73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7415, "upload_time": "2019-07-20T10:07:50", "url": "https://files.pythonhosted.org/packages/ca/ba/5d2d1307e11bd136d398f0c888f3ca42750db10d3212fbb1c2237be7ea9e/CrudeBHT-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "72ea8fde8a08377888422a78e8025653", "sha256": "e808fa842c768c50635a69d68da3c30f1abf788010ce855cc5d9f074d5dd56a8" }, "downloads": -1, "filename": "CrudeBHT-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "72ea8fde8a08377888422a78e8025653", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10473, "upload_time": "2019-07-20T10:07:28", "url": "https://files.pythonhosted.org/packages/46/97/21f146ac4ae956d912a86b894344f8d5e69a0fdf313f2734fca6416194b7/CrudeBHT-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "095be5a2bfa7fbaaa374b954587ac612", "sha256": "b59f78e1d4a7bf90a68d40ad30a70fe7161cc5a5e81a83b2ab153de0bc8f282f" }, "downloads": -1, "filename": "CrudeBHT-0.0.3.tar.gz", "has_sig": false, "md5_digest": "095be5a2bfa7fbaaa374b954587ac612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7497, "upload_time": "2019-07-20T10:07:53", "url": "https://files.pythonhosted.org/packages/81/95/daf80d8092b70ef8f19c2ac2940b2d8c33530ad2054408099b727948fa09/CrudeBHT-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "91027eaeaeb4d2bfedde165ff268d084", "sha256": "1c5457973831f094b422ea3188c526660dd39b689e920ac462d7010f94717b54" }, "downloads": -1, "filename": "CrudeBHT-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "91027eaeaeb4d2bfedde165ff268d084", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17071, "upload_time": "2019-07-20T10:07:31", "url": "https://files.pythonhosted.org/packages/a0/ca/1e0279f7a5c8e00e5a63260a01cfef56715116cb0c5f0eee5155cacc6666/CrudeBHT-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6333b2e0eb551578363faeedd54c1c97", "sha256": "f981fc04fd2428117558f7835f77ce8c8352e0230e32657fed5febb624aaa54d" }, "downloads": -1, "filename": "CrudeBHT-0.0.4.tar.gz", "has_sig": false, "md5_digest": "6333b2e0eb551578363faeedd54c1c97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7497, "upload_time": "2019-07-20T10:07:56", "url": "https://files.pythonhosted.org/packages/af/2a/e0e8ea4a772862c870d88b6a2312a7f2c8a872f8b123fdddf323df4e6312/CrudeBHT-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e344fef2168bec5890edd417f68023aa", "sha256": "5a83b94b31d9353cc8f5cd6006014da2053947a787211e2254786e24799e25b2" }, "downloads": -1, "filename": "CrudeBHT-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "e344fef2168bec5890edd417f68023aa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17267, "upload_time": "2019-07-20T10:07:34", "url": "https://files.pythonhosted.org/packages/e6/b8/4bd3b514f0ae81106d191e8e52b1f441d67c8ffe0b45da1467dc9d9eb3ea/CrudeBHT-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c981a63936fed583434931985a501f4a", "sha256": "e1ad0d799caf46a86f3beb942c7941c71ae70170e68d94fcfde56ea04cd8dd9f" }, "downloads": -1, "filename": "CrudeBHT-0.0.5.tar.gz", "has_sig": false, "md5_digest": "c981a63936fed583434931985a501f4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7482, "upload_time": "2019-07-20T10:07:58", "url": "https://files.pythonhosted.org/packages/57/cf/fd91f6d725a6411f3bfb6ff240cb223b0e85c0abbcb6ba380504c3344ba8/CrudeBHT-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "af23779194a4f6f1f34d5b480712ce92", "sha256": "4324fb47431874c1a3f586961762fd3710583b9a2f63a27c3f9213187fa11428" }, "downloads": -1, "filename": "CrudeBHT-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "af23779194a4f6f1f34d5b480712ce92", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17258, "upload_time": "2019-07-20T10:07:38", "url": "https://files.pythonhosted.org/packages/16/03/64af3e2a38f5bdef8e9694482d62b556691184da640a572379d10b772ef1/CrudeBHT-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26c97d3bd42bb7ffa7ba9fb2dd006760", "sha256": "e88653d4ba8306102969d271aeb9a2b7bc2589227f706d351119f03b98d7be13" }, "downloads": -1, "filename": "CrudeBHT-0.0.6.tar.gz", "has_sig": false, "md5_digest": "26c97d3bd42bb7ffa7ba9fb2dd006760", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7484, "upload_time": "2019-07-20T10:08:01", "url": "https://files.pythonhosted.org/packages/b6/6a/de1c5beac0ace58fb099bc6eb78d902ac92a6bc508d2e6e85f99e129298d/CrudeBHT-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "8813af83f7d29bb66440ce591f96c3ec", "sha256": "e1e30a9dfd6cbdda18ccba23b495479c4c3881758ed881214ccd0b753145107b" }, "downloads": -1, "filename": "CrudeBHT-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8813af83f7d29bb66440ce591f96c3ec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17471, "upload_time": "2019-07-20T10:07:42", "url": "https://files.pythonhosted.org/packages/fb/9f/4f94243fd154842da1498024ba066ab578960f50d6c7c15db6164e607cef/CrudeBHT-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "903d253f33bcbdd9ee51d670c926cb4a", "sha256": "d35b26c408462c3e6d0f9577461647b2c3ba53d586ca512584efb37ad9d75e27" }, "downloads": -1, "filename": "CrudeBHT-0.0.7.tar.gz", "has_sig": false, "md5_digest": "903d253f33bcbdd9ee51d670c926cb4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7542, "upload_time": "2019-07-20T10:08:04", "url": "https://files.pythonhosted.org/packages/d1/5c/4ae1cd498bce71dbe3b98ac2b730211c3fe6fa4aaba448dd8f5c5bba81cd/CrudeBHT-0.0.7.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "6aef19c771039f4c5665439580da168e", "sha256": "92b2235d1b072df6e370d534e6a4ed01fa32940a6decd569b8d0b906f50e8c5f" }, "downloads": -1, "filename": "CrudeBHT-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6aef19c771039f4c5665439580da168e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17472, "upload_time": "2019-07-20T10:07:45", "url": "https://files.pythonhosted.org/packages/20/d7/21ed53d36b446611f30228ad6bef3450a66a14482070ea688ccda9af5972/CrudeBHT-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f7d5e1114c28f023ef14345bad9359b", "sha256": "00c56ba3262b1d1ef5cdb3188aeb912dcb07fda959399c1ed15ab5f653ac29b4" }, "downloads": -1, "filename": "CrudeBHT-1.0.7.tar.gz", "has_sig": false, "md5_digest": "6f7d5e1114c28f023ef14345bad9359b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7556, "upload_time": "2019-07-20T10:08:07", "url": "https://files.pythonhosted.org/packages/e9/94/3c16d75ccebb9e0d04fca6539eb71c54021a16a933226b440d013178445d/CrudeBHT-1.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6aef19c771039f4c5665439580da168e", "sha256": "92b2235d1b072df6e370d534e6a4ed01fa32940a6decd569b8d0b906f50e8c5f" }, "downloads": -1, "filename": "CrudeBHT-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6aef19c771039f4c5665439580da168e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17472, "upload_time": "2019-07-20T10:07:45", "url": "https://files.pythonhosted.org/packages/20/d7/21ed53d36b446611f30228ad6bef3450a66a14482070ea688ccda9af5972/CrudeBHT-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f7d5e1114c28f023ef14345bad9359b", "sha256": "00c56ba3262b1d1ef5cdb3188aeb912dcb07fda959399c1ed15ab5f653ac29b4" }, "downloads": -1, "filename": "CrudeBHT-1.0.7.tar.gz", "has_sig": false, "md5_digest": "6f7d5e1114c28f023ef14345bad9359b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7556, "upload_time": "2019-07-20T10:08:07", "url": "https://files.pythonhosted.org/packages/e9/94/3c16d75ccebb9e0d04fca6539eb71c54021a16a933226b440d013178445d/CrudeBHT-1.0.7.tar.gz" } ] }