2017-04-18 111 views
0

我试图在从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; 

之后,我有你添加x,y(cos)和(sin)的部分。我敢肯定,这不是问题,因为我可以随意放一个角度,它会随机选择角度。

负角度也不起作用。

任何帮助,将不胜感激!

+0

不是相反的角度只是'360-角度? – DavidG

+0

@DavidG不,我不这么认为。试想一个角度1° – MetaColon

+0

@MetaColon是的,那将是359然后 – DavidG

回答

1

我觉得你被迷惑与辐射。等式AngleNoCur + 180 * Math.PI/180对我来说没有多大意义 - 你将180除以180并乘以Pi ...我想你想要你的结果是度数,所以只需保留这个部分--180已经是度数。然后,它看起来就像是:

double? fixedAngleOpposite = AngleNoCur <= 179 ? AngleNoCur + 180 : AngleNoCur - 180; 

而且我也不会。减去特殊情况下180度 - 我会使用模:

double? fixedAngleOpposite = (AngleNoCur + 180) % 360; 

但是,如果你想获得最终辐射点您可以使用此:

fixedAngleOpposite *= Math.PI/180; 

其实我觉得不断地想与辐射点的工作,因为你转换的 - 不管它是什么,我们应该忽略它 - 辐射。然后用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

+0

我很肯定我需要X = host.X +(float)(range * Math.Cos(fixedAngleOpposite.Value)), Y = host.Y +(浮点数)(范围* Math.Sin(fixedAngleOpposite.Value)), – WateR

+0

我会尽力而为。 – WateR

+0

那么,你在使用辐射剂,所以你应该回到辐射剂。我会更新我的帖子,重新获得辐射。 – MetaColon