{"id":2408,"date":"2013-09-13T23:00:33","date_gmt":"2013-09-13T20:00:33","guid":{"rendered":"http:\/\/unitycoder.com\/blog\/?p=2408"},"modified":"2015-08-04T09:23:32","modified_gmt":"2015-08-04T06:23:32","slug":"halton-sequence-c","status":"publish","type":"post","link":"https:\/\/unitycoder.com\/blog\/2013\/09\/13\/halton-sequence-c\/","title":{"rendered":"Halton Sequence c#"},"content":{"rendered":"<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2409\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2013\/09\/13\/halton-sequence-c\/halton_sequence_unity_csharp\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?fit=680%2C318&amp;ssl=1\" data-orig-size=\"680,318\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"halton_sequence_unity_csharp\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?fit=300%2C140&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?fit=680%2C318&amp;ssl=1\" class=\"alignnone size-full wp-image-2409\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?resize=680%2C318\" alt=\"halton_sequence_unity_csharp\" width=\"680\" height=\"318\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?w=680&amp;ssl=1 680w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?resize=300%2C140&amp;ssl=1 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/p>\n<p><a title=\"http:\/\/en.wikipedia.org\/wiki\/Halton_sequence\" href=\"http:\/\/en.wikipedia.org\/wiki\/Halton_sequence\" target=\"_blank\">Halton Sequence<\/a> script to Unity c#. (image: Left side halton sequence, right side using Random.value).<\/p>\n<p>Needed something to distribute objects evenly on given area.. this works for small amount of objects &lt;200, but if add more, they start to form lines(?)<\/p>\n<p>Converted from:<em><br \/>\n&#8220;Halton Sequence Test&#8221; by Sean Davies, licensed under Creative Commons Attribution-Share Alike 3.0 and GNU GPL license.<br \/>\nWork: http:\/\/openprocessing.org\/visuals\/?visualID= 1781<br \/>\nLicense:\u00a0 http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/ http:\/\/creativecommons.org\/licenses\/GPL\/2.0\/<\/em><\/p>\n<p><strong>Source c#:<\/strong><\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ HaltonSequence.cs\r\n\r\nusing UnityEngine;\r\nusing System.Collections;\r\n\r\n\/\/ converted to unity c# by http:\/\/unitycoder.com\/blog\r\n\/\/ original source: http:\/\/www.openprocessing.org\/sketch\/1920\r\n\r\npublic class HaltonSequence\r\n{\r\npublic Vector3 m_CurrentPos = new Vector3(0.0f,0.0f,0.0f);\r\nlong m_Base2 = 0;\r\nlong m_Base3 = 0;\r\nlong m_Base5 = 0;\r\n\r\npublic long Increment()\r\n{\r\nfloat fOneOver3 = 1.0f\/3.0f;\r\nfloat fOneOver5 = 1.0f\/5.0f;\r\n\r\nlong oldBase2 = m_Base2;\r\nm_Base2++;\r\nlong diff = m_Base2 ^ oldBase2;\r\n\r\nfloat s = 0.5f;\r\n\r\ndo\r\n{\r\nif ((oldBase2 &amp; 1) == 1)\r\nm_CurrentPos.x -= s;\r\nelse\r\nm_CurrentPos.x += s;\r\n\r\ns *= 0.5f;\r\n\r\ndiff = diff &gt;&gt; 1;\r\noldBase2 = oldBase2 &gt;&gt; 1;\r\n}\r\nwhile (diff &gt; 0);\r\n\r\nlong bitmask = 0x3;\r\nlong bitadd\u00a0 = 0x1;\r\ns = fOneOver3;\r\n\r\nm_Base3++;\r\n\r\nwhile (true)\r\n{\r\nif ((m_Base3 &amp; bitmask) == bitmask)\r\n{\r\nm_Base3 += bitadd;\r\nm_CurrentPos.y -= 2 * s;\r\n\r\nbitmask = bitmask &lt;&lt; 2;\r\nbitadd\u00a0 = bitadd\u00a0 &lt;&lt; 2;\r\n\r\ns *= fOneOver3;\r\n}\r\nelse\r\n{\r\nm_CurrentPos.y += s;\r\nbreak;\r\n}\r\n};\r\nbitmask = 0x7;\r\nbitadd\u00a0 = 0x3;\r\nlong dmax = 0x5;\r\n\r\ns = fOneOver5;\r\n\r\nm_Base5++;\r\n\r\nwhile (true)\r\n{\r\nif ((m_Base5 &amp; bitmask) == dmax)\r\n{\r\nm_Base5 += bitadd;\r\nm_CurrentPos.z -= 4 * s;\r\n\r\nbitmask = bitmask &lt;&lt; 3;\r\ndmax = dmax &lt;&lt; 3;\r\nbitadd\u00a0 = bitadd\u00a0 &lt;&lt; 3;\r\n\r\ns *= fOneOver5;\r\n}\r\nelse\r\n{\r\nm_CurrentPos.z += s;\r\nbreak;\r\n}\r\n};\r\n\r\nreturn m_Base2;\r\n}\r\n\r\npublic void Reset()\r\n{\r\nm_CurrentPos.x = 0.0f;\r\nm_CurrentPos.y = 0.0f;\r\nm_CurrentPos.z = 0.0f;\r\nm_Base2 = 0;\r\nm_Base3 = 0;\r\nm_Base5 = 0;\r\n}\r\n}\r\n<\/pre>\n<p><strong>Source c#<\/strong> (for testing it)<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ HaltonTest.cs\r\n\r\nusing UnityEngine;\r\nusing System.Collections;\r\n\r\npublic class HaltonTest : MonoBehaviour {\r\n\r\nHaltonSequence positionsequence = new HaltonSequence();\r\n\r\nvoid Start ()\r\n{\r\nfloat size = 20.0f*2;\r\npositionsequence.Reset();\r\nVector3 position = Vector3.zero;\r\nint amount = 200;\r\nfor(int i=0;i&lt;amount;i++)\r\n{\r\npositionsequence.Increment();\r\n\/\/position.set(positionsequence.m_CurrentPos);\r\n\/\/Debug.Log(positionsequence.m_CurrentPos);\r\nposition = positionsequence.m_CurrentPos;\r\n\/\/position.x -=0.5f;\r\nposition.y = 0.0f;\r\n\/\/position.z -=0.5f;\r\nposition *= size;\r\nGameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);\r\nsphere.transform.position = position;\r\n}\r\n\/\/ random\r\nfor(int i=0;i&lt;amount;i++)\r\n{\r\nGameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);\r\nsphere.transform.position = new Vector3(Random.value*size,0,Random.value*size) + new Vector3(size+10,0,0);\r\n}\r\n}\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Halton Sequence script to Unity c#. (image: Left side halton sequence, right side using Random.value). Needed something to distribute objects evenly on given area.. this works for small amount of objects &lt;200, but if add more, they start to form lines(?) Converted from: &#8220;Halton Sequence [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2409,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[23,3],"tags":[555,554,553,260,264,556],"class_list":["post-2408","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-functions-unity3d","category-unity3d","tag-distribute","tag-distribution","tag-halton-sequence","tag-noise","tag-random","tag-uniform"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2013\/09\/halton_sequence_unity_csharp.png?fit=680%2C318&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p1KTaT-CQ","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/2408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/comments?post=2408"}],"version-history":[{"count":4,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/2408\/revisions"}],"predecessor-version":[{"id":3908,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/2408\/revisions\/3908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media\/2409"}],"wp:attachment":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media?parent=2408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/categories?post=2408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/tags?post=2408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}