Tag: math

C#数学问题:2的最小幂大于X?

public int CalcBrackets(int teamCount) { int positions = 1; while (positions < teamCount) positions *= 2; return positions; } 我想要的最小数字是2的幂,大于或等于teamCount。 这真的是最好的方法吗? 肯定看起来很可怕:(

确定是从两个角度顺时针或逆时针转动

我在XNA制作游戏。 我有敌人和球员。 敌人应该逐渐转向玩家。 他们应该确定是否需要顺时针或逆时针转动,以较短者为准。 我通过使用Atan2得到了敌人当前面对的角度和它应该面对的角度(敌人和玩家之间的线的角度)作为弧度。 我虽然得到了一些奇怪的行为。 让我们在下面的场景中说。 敌人可能会朝错误的方向转过来。 我的代码(下面)不断变长,我仍然遇到问题。 此代码是敌人类Update方法的一部分。 这必须是游戏中要克服的常见问题。 有没有办法解决这个问题? //this bit is just in case enemy has rotated more than 360 degrees (gets set back to 0) if (Math.Abs(_blocklist[0]._floor.Revolutions) >= 2) { _blocklist[0]._floor.Rotation = 0.0f; } //enemy rotation in radians float blockroat = _blocklist[0]._floor.Rotation; // vector to player – vector to enemy […]

在HLSL中绘制SuperEllipse

更新:关于如何使用Superformula绘制一个的答案就在最后 我需要使用SuperEllipse绘制一个圆角矩形,例如这个。 在能够在任何地方轻松绘制时绘制一个: 但是在你不能的HLSL中,我遇到了绘图或不是像素的条件: 这是HLSL代码: sampler2D input : register(s0); /// Explain the purpose of this variable. /// 0.0 /// 10.0 /// 4.0 float N : register(C1); static const float pi = 3.1415926535f; float2 superEllipse(float n, float a, float b, float theta) { float ct = cos(theta); float st = sin(theta); float x = a * […]

在C#中添加long和ulong

我正在使用的api有一个ulong字段(我不能改变它)。 我需要long调整这个字段(也可以是一个int )。 但是我无法添加这些togeather: Operator ‘+’ is ambiguous on operands of type ‘ulong’ and ‘long’ 。 我无法将long转换为ulong因为我将失去标志,我无法将ulong转换为long因为我可能会丢失部分值。 最终我想尝试调整值,如果它会导致换行我想返回false并且没有完成调整。 如果它没有换行我想完成调整并返回true; 我可以做这个部分,但前提是我可以找出一种方法将两个字段放在一起。 public ulong Value; public bool AdjustValue(long amount) { // Operator ‘+’ is ambiguous on operands of type ‘ulong’ and ‘long’ ulong adjustValue = Value + amount; if (amount Value) return false; if (amount > 0 […]

非常非常大的C#浮点数

我正在进行一些人口建模(为了好玩,主要是为了实现承载能力和后勤function的概念)。 该模型适用于多个行星(目前约有100,000个行星)。 当人口达到一个星球的承载能力时,居民开始分支到附近的行星,依此类推。 问题:10万多颗行星可以容纳很多人。 超过C# Decimal可以处理。 由于我正在使用这些数字做平均值和其他东西,我需要能够使用浮点(或者我只使用BigInt库)。 有谁知道我可以使用的BigFloatingPoint类(或其他)? 谷歌今天非常无益。 我可以编写一个可以运行得很好的类,但是如果存在这样的东西,我宁愿使用预先存在的东西。

这种类型的分区是否有名称或内置c#函数

我有这种扩展方法,但我不知道是否已有内置运算符或者是否有名称: public static class IntegerExtensions { public static int DivideWholeAndPartial(this int total, int divisor) { return (total / divisor) + ((total % divisor) == 0 ? 0 : 1); } } 基本上如果总数相等,则返回。 如果有剩余部分则将其四舍五入 – 即包括部分整体。 有点像“需要多少一升瓶装3.5升水”的问题。 我错过了任何内置的C#方法吗? 这有名字吗?

如何舍入双值但保持尾随零

在C#中,我想要一个将给定的double舍入到给定的小数位数的函数。 我总是希望我的函数返回一个给定小数位数的值(可以是一个字符串)。 如有必要,需要添加尾随零。 例: string result = MyRoundingFunction(1.01234567, 3); // this must return “1.012” 这很容易,它只是四舍五入并转换为字符串。 但问题出现了: string result2 = MyRoundingFuntion(1.01, 3); // this must return “1.010” 有没有方便/标准的方法来做到这一点,还是我手动需要添加尾随零? 任何帮助表示赞赏。 请注意,在现实生活中,我不能硬编码小数。

为什么C#Math.Ceiling向下舍入?

我有一个艰难的一天,但有些东西没有正确加起来。 在我的C#代码中,我有这个: Math.Ceiling((decimal)(this.TotalRecordCount / this.PageSize)) Where (int)TotalRecordCount = 12和(int)PageSize = 5.我得到的结果是2。 (两个值都是int值。) 根据我的计算,12/5 = 2.4。 我以为Math.Ceiling会一直围着,在这种情况下,给我3? PS,如果我这样做: Math.Ceiling(this.TotalRecordCount / this.PageSize) 我收到的消息是: Math.Ceiling(this.TotalRecordCount / this.PageSize) 以下方法或属性之间的调用不明确: ‘System.Math.Ceiling(decimal)’和’System.Math.Ceiling(double)’

我在这个C#代码中使用Math.Pow(a,b)函数有多么错误?

我发现以下代码没有任何问题,MSVC#编译器将NAN存储在“c”中: double c = Math.Pow(-8d, 1d / 3d); 虽然我认为这行应该为“c”计算-2,但编译器将NAN存储在“c”中? 我错了什么?

相机旋转与任意平面对齐

我认为对于相机来说,这是一个相当简单的场景,但我的穴居人大脑拒绝思考任何超过两个维度的东西。 我的3D相机需要在物体后面对齐。 这个物体可以粘在任何表面上,因此相机对“向上”的概念可以是任意向量。 它与这个问题非常相似,但由于我不直接控制’播放器’对象,而是尝试使用CreateLookAt,我无法理解解决方案: 如何在使用四元数相机时计算旋转? 为了简化测试,我们假设对象在球体上。 我目前有: 目标对象在3D空间中的绝对位置。 单位向量,表示对象当前所在表面的法线。 在这种情况下,球体上三角形的法线。 X和Y角描述了摄像机应如何绕物体运行。 我相信这就是所需要的,但我不确定如何以一种有效的方式将它们组合在一起。 我知道我需要通过对象来转换角度相机,我最好的尝试如下: Matrix orientation = Matrix.CreateRotationY(OrbitYaw) * Matrix.CreateRotationX(OrbitPitch); orientation.Up = CurrentNormal; orientation.Right = Vector3.Cross(orientation.Forward, orientation.Up); orientation.Right = Vector3.Normalize(orientation.Right); orientation.Forward = Vector3.Cross(orientation.Up, orientation.Right); orientation.Forward = Vector3.Normalize(orientation.Forward); Vector3 Target = ObjectPosition; Vector3 Position = Vector3.Transform(new Vector3(0,50,0), orientation); Matrix View = Matrix.CreateLookAt(Position, Target, CurrentNormal); 定位代码似乎是正确的,但由于第二个问题,很难分辨:相机在位置变化时似乎“滚动”。 这是有道理的 – […]