【问题标题】:Getting the opposite angle of a circle获得圆的对角
【发布时间】:2017-04-18 21:45:18
【问题描述】:

我正在尝试编写从 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) 的部分。我确定这不是问题,因为我可以放一个随机角度,它会转到那个随机角度。

负角也不起作用。

任何帮助将不胜感激!

【问题讨论】:

  • 对角不就是360-angle吗?
  • @DavidG 不,我不这么认为。想象一下1°的角度
  • @MetaColon 是的,那就是 359
  • @DavidG 所以...不会相反吧?

标签: c# visual-studio-2015


【解决方案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 使用 Modulo,您可以缩短等式:

double? fixedAngleOpposite = (AngleNoCur + Math.PI) % (2 * Math.PI);

有关度数和辐射的更多信息,我建议您阅读以下内容:http://www.vcskicks.com/csharp_net_angles.php。 有关 Modulo 的更多信息,请查看:https://en.wikipedia.org/wiki/Modulo_operation

【讨论】:

  • 我很确定我需要 X = host.X + (float)(range * Math.Cos(fixedAngleOpposite.Value)), Y = host.Y + (float)(range * Math.Sin(fixedAngleOpposite.Value)),
  • 不过我会试试的。
  • 嗯,你正在使用辐射,所以你应该转换回辐射。我会更新我的帖子以再次获得光芒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多