{"id":22549055,"url":"https://github.com/dcfapixels/quasi_random","last_synced_at":"2025-04-10T01:52:41.727Z","repository":{"id":54336056,"uuid":"522019597","full_name":"DCFApixels/Quasi_Random","owner":"DCFApixels","description":"Quasi-Random Number Generator for C#","archived":false,"fork":false,"pushed_at":"2024-11-28T20:02:46.000Z","size":89,"stargazers_count":20,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-24T03:34:51.121Z","etag":null,"topics":["csharp","no-dependencies","quasi-random-generator","random","unity","unity3d"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DCFApixels.png","metadata":{"files":{"readme":"README-ZH.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-08-06T18:07:00.000Z","updated_at":"2025-03-23T17:20:44.000Z","dependencies_parsed_at":"2024-03-31T15:26:03.201Z","dependency_job_id":null,"html_url":"https://github.com/DCFApixels/Quasi_Random","commit_stats":null,"previous_names":["dcfapixels/unity-quasi_random"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FQuasi_Random","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FQuasi_Random/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FQuasi_Random/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FQuasi_Random/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DCFApixels","download_url":"https://codeload.github.com/DCFApixels/Quasi_Random/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248142941,"owners_count":21054671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","no-dependencies","quasi-random-generator","random","unity","unity3d"],"created_at":"2024-12-07T16:07:46.799Z","updated_at":"2025-04-10T01:52:41.704Z","avatar_url":"https://github.com/DCFApixels.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg width=\"300\" src=\"https://github.com/user-attachments/assets/451365c6-8957-48f9-8199-ce9b81cb87ca\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"Version\" src=\"https://img.shields.io/github/package-json/v/DCFApixels/Quasi_Random?style=for-the-badge\u0026color=1e90ff\"\u003e\n\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/DCFApixels/Quasi_Random?color=1e90ff\u0026style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n# Quasi Random Generator\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"3\"\u003eReadme Languages:\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd nowrap width=\"100\"\u003e\n      \u003ca href=\"https://github.com/DCFApixels/Quasi_Random/blob/main/README-RU.md\"\u003e\n        \u003cimg src=\"https://github.com/user-attachments/assets/7bc29394-46d6-44a3-bace-0a3bae65d755\"\u003e\u003c/br\u003e\n        \u003cspan\u003eРусский\u003c/span\u003e\n      \u003c/a\u003e  \n    \u003c/td\u003e\n    \u003ctd nowrap width=\"100\"\u003e\n      \u003ca href=\"https://github.com/DCFApixels/DragonECS\"\u003e\n        \u003cimg src=\"https://github.com/user-attachments/assets/30528cb5-f38e-49f0-b23e-d001844ae930\"\u003e\u003c/br\u003e\n        \u003cspan\u003eEnglish\u003c/span\u003e\n      \u003c/a\u003e  \n    \u003c/td\u003e\n    \u003ctd nowrap width=\"100\"\u003e\n      \u003ca href=\"https://github.com/DCFApixels/Quasi_Random/blob/main/README-ZH.md\"\u003e\n        \u003cimg src=\"https://github.com/user-attachments/assets/3c699094-f8e6-471d-a7c1-6d2e9530e721\"\u003e\u003c/br\u003e\n        \u003cspan\u003e中文\u003c/span\u003e\n      \u003c/a\u003e  \n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/br\u003e\n\n## 目录\n* [介绍](#介绍)\n* [安装](#安装)\n* [描述](#描述)\n  * [构造](#构造)\n  * [生成](#生成)\n  * [状态](#状态)\n  * [其他](#其他)\n* [示例/比较](#示例比较)\n\n\u003c/br\u003e\n\n## 介绍\nQuasi随机序列在需要模拟随机填充并均匀填充空间的情况下非常适用。该实现基于新的加法递归R序列和[habr文章](https://habr.com/ru/articles/440892/)。R序列易于计算，并且在整数计算时具有确定性和良好的性能。\n\n我使用该序列来生成[Warcraft 3地图](https://www.youtube.com/watch?v=txSoCd98OcI\u0026list=PLZT7fvvYlYfhqWJBWzJoLQxconfz1lHPq\u0026index=17)的起始位置、商店和其他活动点的生成器。因此，活动点大致均匀分布在整个地图上，同时它们的位置看起来是随机的。\n\n\u003c/br\u003e\n\n## 安装\n威安装只需将src文件夹中的内容复制到项目中。 src 文件夹包含以下内容：\n\nsrc\\QuasiRandom.cs - 基本版本，不依赖于任何环境；\nsrc\\QuasiRandom.unity.cs - 为支持Unity中的向量的扩展；\nsrc\\QuasiRandom.unity.mathematics.cs - 为支持Unity.Mathematics中的向量的扩展；\n\n\u003c/br\u003e\n\n## 描述\n\nQuasiRandom 实现为一个大小为 4 字节的 struct，可以为 1D、2D、3D 和 4D 空间生成均匀填充的序列。\n\n### 构造\n+ `new QuasiRandom()` - 种子为0的实例；\n+ `new QuasiRandom(seed)` - 种子为seed的实例；\n+ `QuasiRandom.AutoSeed()` - 自动种子的实例；\n\n### 生成\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextBool\u003c/b\u003e\u003c/summary\u003e\n\n```\n[false - true]\n```\n```c#\nbool NextBool();\nvoid NextBool2(out bool x, out bool y);\nvoid NextBool3(out bool x, out bool y, out bool z);\nvoid NextBool4(out bool x, out bool y, out bool z, out bool w);\nBool2 NextBool2();\nBool3 NextBool3();\nBool4 NextBool4();\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextInt\u003c/b\u003e\u003c/summary\u003e\n\n```\n[int.MinValue \u003c= x \u003c= int.MaxValue]\n```\n```c#\nint NextInt();\nvoid NextInt2(out int x, out int y);\nvoid NextInt3(out int x, out int y, out int z);\nvoid NextInt4(out int x, out int y, out int z, out int w);\nInt2 NextInt2();\nInt3 NextInt3();\nInt4 NextInt4();\n```\n\n```\n[0 \u003c= x \u003c max]\n```\n```c#\nint NextInt(int max);\nvoid NextInt2(int max, out int x, out int y);\nvoid NextInt3(int max, out int x, out int y, out int z);\nvoid NextInt4(int max, out int x, out int y, out int z, out int w);\nInt2 NextInt2(int max);\nInt3 NextInt3(int max);\nInt4 NextInt4(int max);\n```\n\n```\n[min \u003c= x \u003c max]\n```\n```c#\nint NextInt(int min, int max);\nvoid NextInt2(int min, int max, out int x, out int y);\nvoid NextInt3(int min, int max, out int x, out int y, out int z);\nvoid NextInt4(int min, int max, out int x, out int y, out int z, out int w);\nInt2 NextInt2(int min, int max);\nInt3 NextInt3(int min, int max);\nInt4 NextInt4(int min, int max);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextUInt\u003c/b\u003e\u003c/summary\u003e\n\n```\n[uint.MinValue \u003c= x \u003c= uint.MaxValue]\n```\n```c#\nuint NextUInt();\nvoid NextUInt2(out uint x, out uint y);\nvoid NextUInt3(out uint x, out uint y, out uint z);\nvoid NextUInt4(out uint x, out uint y, out uint z, out uint w);\nUInt2 NextUInt2();\nUInt3 NextUInt3();\nUInt4 NextUInt4();\n```\n\n```\n[0 \u003c= x \u003c max]\n```\n```c#\nuint NextUInt(uint max);\nvoid NextUInt2(uint max, out uint x, out uint y);\nvoid NextUInt3(uint max, out uint x, out uint y, out uint z);\nvoid NextUInt4(uint max, out uint x, out uint y, out uint z, out uint w);\nUInt2 NextUInt2(uint max);\nUInt3 NextUInt3(uint max);\nUInt4 NextUInt4(uint max);\n```\n\n```\n[min \u003c= x \u003c max]\n```\n```c#\nuint NextUInt(uint min, uint max);\nvoid NextUInt2(uint min, uint max, out uint x, out uint y);\nvoid NextUInt3(uint min, uint max, out uint x, out uint y, out uint z);\nvoid NextUInt4(uint min, uint max, out uint x, out uint y, out uint z, out uint w);\nUInt2 NextUInt2(uint min, uint max);\nUInt3 NextUInt3(uint min, uint max);\nUInt4 NextUInt4(uint min, uint max);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextLong\u003c/b\u003e\u003c/summary\u003e\n\n```\n[long.MinValue \u003c= x \u003c= long.MaxValue]\n```\n```c#\nlong NextLong();\nvoid NextLong2(out long x, out long y);\nvoid NextLong3(out long x, out long y, out long z);\nvoid NextLong4(out long x, out long y, out long z, out long w);\nLong2 NextLong2();\nLong3 NextLong3();\nLong4 NextLong4();\n```\n\n```\n[0 \u003c= x \u003c max]\n```\n```c#\nlong NextLong(long max);\nvoid NextLong2(long max, out long x, out long y);\nvoid NextLong3(long max, out long x, out long y, out long z);\nvoid NextLong4(long max, out long x, out long y, out long z, out long w);\nLong2 NextLong2(long max);\nLong3 NextLong3(long max);\nLong4 NextLong4(long max);\n```\n\n```\n[min \u003c= x \u003c max]\n```\n```c#\nlong NextLong(long min, long max);\nvoid NextLong2(long min, long max, out long x, out long y);\nvoid NextLong3(long min, long max, out long x, out long y, out long z);\nvoid NextLong4(long min, long max, out long x, out long y, out long z, out long w);\nLong2 NextLong2(long min, long max);\nLong3 NextLong3(long min, long max);\nLong4 NextLong4(long min, long max);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextULong\u003c/b\u003e\u003c/summary\u003e\n\n```\n[ulong.MinValue \u003c= x \u003c= ulong.MaxValue]\n```\n```c#\nulong NextULong();\nvoid NextULong2(out ulong x, out ulong y);\nvoid NextULong3(out ulong x, out ulong y, out ulong z);\nvoid NextULong4(out ulong x, out ulong y, out ulong z, out ulong w);\nULong2 NextULong2();\nULong3 NextULong3();\nULong4 NextULong4();\n```\n\n```\n[0 \u003c= x \u003c max]\n```\n```c#\nulong NextULong(ulong max);\nvoid NextULong2(ulong max, out ulong x, out ulong y);\nvoid NextULong3(ulong max, out ulong x, out ulong y, out ulong z);\nvoid NextULong4(ulong max, out ulong x, out ulong y, out ulong z, out ulong w);\nULong2 NextULong2(ulong max);\nULong3 NextULong3(ulong max);\nULong4 NextULong4(ulong max);\n```\n\n```\n[min \u003c= x \u003c max]\n```\n```c#\nulong NextULong(ulong min, ulong max);\nvoid NextULong2(ulong min, ulong max, out ulong x, out ulong y);\nvoid NextULong3(ulong min, ulong max, out ulong x, out ulong y, out ulong z);\nvoid NextULong4(ulong min, ulong max, out ulong x, out ulong y, out ulong z, out ulong w);\nULong2 NextULong2(ulong min, ulong max);\nULong3 NextULong3(ulong min, ulong max);\nULong4 NextULong4(ulong min, ulong max);\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextFloat\u003c/b\u003e\u003c/summary\u003e\n\n```\n[0.0f \u003c= x \u003c 1.0f]\n```\n```c#\nfloat NextFloat();\nvoid NextFloat2(out float x, out float y);\nvoid NextFloat3(out float x, out float y, out float z);\nvoid NextFloat4(out float x, out float y, out float z, out float w);\nFloat2 NextFloat2();\nFloat3 NextFloat3();\nFloat4 NextFloat4();\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eNextDouble\u003c/b\u003e\u003c/summary\u003e\n\n```\n[0.0d \u003c= x \u003c 1.0d]\n```\n```c#\ndouble NextDouble();\nvoid NextDouble2(out double x, out double y);\nvoid NextDouble3(out double x, out double y, out double z);\nvoid NextDouble4(out double x, out double y, out double z, out double w);\nDouble2 NextDouble2();\nDouble3 NextDouble3();\nDouble4 NextDouble4();\n```\n\n\u003c/details\u003e\n\n### 状态\n\n+ `GetState()` - 获取状态；\n+ `SetState(state)` - 设置状态；\n\n### 其他\n\n重写了 `Equals`、`GetHashCode`、`ToString` 方法和比较运算符。\n\n\u003c/br\u003e\n\n## 示例/比较\n下图比较了在二维空间中使用 `System.Random` 和 `QuasiRandom` 生成点的情况：\n![ex](https://github.com/DCFApixels/Quasi_Random/assets/99481254/a1556d7d-7e6b-41cc-98dd-7af6aeffb590)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcfapixels%2Fquasi_random","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcfapixels%2Fquasi_random","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcfapixels%2Fquasi_random/lists"}