我正在尝试编写从0到359的随机角度的代码,然后从该随机角度得到相反的角度。
double? AngleNoCur = randomAngle ? Random.Next(0, 359) : angle * Math.PI / 180; //'angle' is used for something else, ignore it
double? fixedAngleOpposite = AngleNoCur <= 179 ? AngleNoCur + 180 * Math.PI / 180 : AngleNoCur - 180 * Math.PI / 180;
之后,我有一个部分,你用(cos)和(sin)添加x,y。我确定这不是问题,因为我可以放一个随机角度,它会转到那个随机角度。
负角度也不起作用。
任何帮助将不胜感激!
答案 0 :(得分:1)
我认为你与辐射器混淆了。等式AngleNoCur + 180 * Math.PI / 180
对我来说没有多大意义 - 你加180除以180并乘以Pi ...我想你想要你得到度数,所以只留下那部分 - 180是已经在学位。然后它看起来像那样:
double? fixedAngleOpposite = AngleNoCur <= 179 ? AngleNoCur + 180 : AngleNoCur - 180;
此外,在特殊情况下我不会减去180度 - 我会使用Modulo:
double? fixedAngleOpposite = (AngleNoCur + 180) % 360;
但是,如果你想最终得到辐射,你可以使用它:
fixedAngleOpposite *= Math.PI / 180;
实际上我想你一直想和radiants一起工作,因为你转换了角度 - 无论它是什么,我们应该忽略它 - 对于radiants。然后您使用fixedAngleOpposite
的部分应该有效,但您应该改变AngleNoCur:
double? AngleNoCur = randomAngle ? Random.Next(0, 359) * Math.PI / 180 : angle * Math.PI / 180;
但是,我仍然建议您使用模数fixedAngleOpposite
来缩短您的等式:
double? fixedAngleOpposite = (AngleNoCur + Math.PI) % (2 * Math.PI);
有关度数和辐射的更多信息,我建议您仔细阅读:http://www.vcskicks.com/csharp_net_angles.php。 有关Modulo的更多信息,请查看以下内容:https://en.wikipedia.org/wiki/Modulo_operation。