{"id":388,"date":"2017-03-04T18:15:33","date_gmt":"2017-03-04T18:15:33","guid":{"rendered":"http:\/\/nbodyphysics.com\/blog\/?page_id=388"},"modified":"2017-03-04T18:15:33","modified_gmt":"2017-03-04T18:15:33","slug":"demo-custom-gravity","status":"publish","type":"page","link":"https:\/\/nbodyphysics.com\/blog\/gravity-engine-doc-1-3-2-2-2\/demonstrations-2\/demo-custom-gravity\/","title":{"rendered":"DEMO &#8211; Custom Gravity"},"content":{"rendered":"<h2>Custom Gravity<\/h2>\n<p>Gravity Engine 1.4 allows the force law used by the gravity engine to be changed\/customized. This produces new and interesting orbits which do not return to their original position &#8211; since this a property unique to Newton&#8217;s force law (as well as F = R^2).<\/p>\n<p>For example a scene with a force law of 1\/R results in orbits such as:<\/p>\n<p><a href=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-393\" src=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM-300x198.png\" alt=\"Screen Shot 2017-03-04 at 12.57.52 PM\" width=\"427\" height=\"282\" srcset=\"https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM-300x198.png 300w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM-768x508.png 768w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM-1024x677.png 1024w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM-624x413.png 624w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.57.52-PM.png 1688w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/a><\/p>\n<p>This force can be selected via the Gravity Engine inspector:<\/p>\n<p><a href=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.49-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-390\" src=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.49-PM-300x278.png\" alt=\"Screen Shot 2017-03-04 at 12.58.49 PM\" width=\"300\" height=\"278\" srcset=\"https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.49-PM-300x278.png 300w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.49-PM-624x579.png 624w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.49-PM.png 688w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>You are not limited to the force laws as defined in the inspector. By selecting custom and adding a component implementing the IForceDelegate interface you can define any radial force law. For example with the CustomForce delegate:<\/p>\n<pre> <span style=\"font-family: Menlo;\"> <span style=\"color: #009695;\">public<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">class<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">CustomForce<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">:<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">MonoBehaviour<\/span><span style=\"color: #333333;\">,<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #3364a4;\">IForceDelegate<\/span><span style=\"color: #333333;\">\u00a0\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n \r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">public<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">float<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">a<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">2.0f<\/span><span style=\"color: #333333;\">;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">public<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">float<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">b<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">=<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #f57d00;\">1.0f<\/span><span style=\"color: #333333;\">;<\/span>\r\n \r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">summary<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0acceleration\u00a0=\u00a0a\u00a0*\u00a0ln(b\u00a0*\u00a0r)<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">\/<\/span><span style=\"font-style: italic; color: #888888;\">summary<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">returns<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span><span style=\"font-style: italic; color: #888888;\">The\u00a0accel.<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">\/<\/span><span style=\"font-style: italic; color: #888888;\">returns<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">param<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">name<\/span><span style=\"font-style: italic; color: #888888;\">=<\/span><span style=\"font-style: italic; color: #888888;\">\"<\/span><span style=\"font-style: italic; color: #888888;\">m2<\/span><span style=\"font-style: italic; color: #888888;\">\"<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span><span style=\"font-style: italic; color: #888888;\">M2.<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">\/<\/span><span style=\"font-style: italic; color: #888888;\">param<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">\/\/\/<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">param<\/span><span style=\"font-style: italic; color: #888888;\">\u00a0<\/span><span style=\"font-style: italic; color: #888888;\">name<\/span><span style=\"font-style: italic; color: #888888;\">=<\/span><span style=\"font-style: italic; color: #888888;\">\"<\/span><span style=\"font-style: italic; color: #888888;\">r_sep<\/span><span style=\"font-style: italic; color: #888888;\">\"<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span><span style=\"font-style: italic; color: #888888;\">R\u00a0sep.\u00a0The\u00a0distance\u00a0between\u00a0the\u00a0bodies<\/span><span style=\"font-style: italic; color: #888888;\">&lt;<\/span><span style=\"font-style: italic; color: #888888;\">\/<\/span><span style=\"font-style: italic; color: #888888;\">param<\/span><span style=\"font-style: italic; color: #888888;\">&gt;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">public<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">double<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">CalcF<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #009695;\">double<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">r_sep<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">return<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">a<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">System<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #3364a4;\">Math<\/span><span style=\"color: #333333;\">.<\/span><span style=\"color: #333333;\">Log<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #333333;\">b<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">r_sep<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #333333;\">}<\/span>\r\n \r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">public<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #009695;\">double<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">CalcFdot<\/span><span style=\"color: #333333;\">(<\/span><span style=\"color: #009695;\">double<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">r_sep<\/span><span style=\"color: #333333;\">)<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">{<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #009695;\">return<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">a<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">*<\/span><span style=\"color: #333333;\">\u00a0<\/span><span style=\"color: #333333;\">b<\/span><span style=\"color: #333333;\">\/<\/span><span style=\"color: #333333;\">r_sep<\/span><span style=\"color: #333333;\">;<\/span>\r\n <span style=\"color: #333333;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"color: #333333;\">}<\/span>\r\n \r\n <span style=\"color: #333333;\">}<\/span><\/span><\/pre>\n<p>The resulting orbits are:<\/p>\n<p><a href=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-392\" src=\"http:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM-300x210.png\" alt=\"Screen Shot 2017-03-04 at 12.58.14 PM\" width=\"464\" height=\"325\" srcset=\"https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM-300x210.png 300w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM-768x537.png 768w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM-1024x717.png 1024w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM-624x437.png 624w, https:\/\/nbodyphysics.com\/blog\/wp-content\/uploads\/2017\/03\/Screen-Shot-2017-03-04-at-12.58.14-PM.png 1632w\" sizes=\"auto, (max-width: 464px) 100vw, 464px\" \/><\/a><\/p>\n<p>Note that the IForceDelegate class has both the force law and it&#8217;s derivative Fdot (or jerk, as the change in acceleration is sometimes called). The Fdot\u00a0is used if the Hermite integrator is selected. It can be omitted if only the Leapfrog integrator is used.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Custom Gravity Gravity Engine 1.4 allows the force law used by the gravity engine to be changed\/customized. This produces new and interesting orbits which do not return to their original position &#8211; since this a property unique to Newton&#8217;s force law (as well as F = R^2). For example a scene with a force law [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1051,"menu_order":14,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-388","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P3pCRa-6g","_links":{"self":[{"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/pages\/388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/comments?post=388"}],"version-history":[{"count":4,"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/pages\/388\/revisions"}],"predecessor-version":[{"id":396,"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/pages\/388\/revisions\/396"}],"up":[{"embeddable":true,"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/pages\/1051"}],"wp:attachment":[{"href":"https:\/\/nbodyphysics.com\/blog\/wp-json\/wp\/v2\/media?parent=388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}