红警DIY论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1703|回复: 19

八方向的换算函数

[复制链接]
发表于 2021-5-5 13:01:09 | 显示全部楼层 |阅读模式



  1.         public static Direction Facing2Dir(FacingStruct facing)
  2.         {
  3.             var dirValue = facing.target().value();
  4.             Direction dir = default;
  5.             if (dirValue >= 0)
  6.             {
  7.                 if (dirValue <= 4096)
  8.                     dir = Direction.N;
  9.                 else if (dirValue <= 12288)
  10.                     dir = Direction.NE;
  11.                 else if (dirValue <= 20480)
  12.                     dir = Direction.E;
  13.                 else if (dirValue <= 28672)
  14.                     dir = Direction.SE;
  15.                 else
  16.                     dir = Direction.S;
  17.             }
  18.             else
  19.             {
  20.                 if (dirValue > -4096)
  21.                     dir = Direction.N;
  22.                 else if (dirValue > -12288)
  23.                     dir = Direction.NW;
  24.                 else if (dirValue > -20480)
  25.                     dir = Direction.W;
  26.                 else if (dirValue > -28672)
  27.                     dir = Direction.SW;
  28.                 else
  29.                     dir = Direction.S;
  30.             }
  31.             return dir;
  32.         }
复制代码





  1.         public static Direction Point2Dir(CoordStruct location, CoordStruct targetPos)
  2.         {
  3.             Point2D p1 = new Point2D(location.X, location.Y);
  4.             Point2D p2 = new Point2D(targetPos.X, targetPos.Y);
  5.             return Point2Dir(p1, p2);
  6.         }

  7.         public static Direction Point2Dir(Point2D p1, Point2D p2)
  8.         {
  9.             Direction dir = Direction.N;
  10.             var angle = Math.Atan2((p2.X - p1.X), (p2.Y - p1.Y));
  11.             var theta = angle * (180 / Math.PI);
  12.             if (theta >= 0)
  13.             {
  14.                 if (theta <= 22.5)
  15.                     dir = Direction.S;
  16.                 else if (theta <= 67.5)
  17.                     dir = Direction.SE;
  18.                 else if (theta <= 112.5)
  19.                     dir = Direction.E;
  20.                 else if (theta <= 157.5)
  21.                     dir = Direction.NE;
  22.                 else
  23.                     dir = Direction.N;
  24.             }
  25.             else
  26.             {
  27.                 if (theta > -22.5)
  28.                     dir = Direction.S;
  29.                 else if (theta > -67.5)
  30.                     dir = Direction.SW;
  31.                 else if (theta > -112.5)
  32.                     dir = Direction.W;
  33.                 else if (theta > -157.5)
  34.                     dir = Direction.NW;
  35.                 else
  36.                     dir = Direction.N;
  37.             }
  38.             return dir;
  39.         }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2021-5-5 13:07:28 | 显示全部楼层
方向转对应的向量


  1.         public static CoordStruct Direction2Vector(Direction dir)
  2.         {
  3.             CoordStruct vector = default;
  4.             switch (dir)
  5.             {
  6.                 case Direction.N:
  7.                     vector = new CoordStruct(0, -1, 0);
  8.                     break;
  9.                 case Direction.NE:
  10.                     vector = new CoordStruct(1, -1, 0);
  11.                     break;
  12.                 case Direction.E:
  13.                     vector = new CoordStruct(1, 0, 0);
  14.                     break;
  15.                 case Direction.SE:
  16.                     vector = new CoordStruct(1, 1, 0);
  17.                     break;
  18.                 case Direction.S:
  19.                     vector = new CoordStruct(0, 1, 0);
  20.                     break;
  21.                 case Direction.SW:
  22.                     vector = new CoordStruct(-1, 1, 0);
  23.                     break;
  24.                 case Direction.W:
  25.                     vector = new CoordStruct(-1, 0, 0);
  26.                     break;
  27.                 case Direction.NW:
  28.                     vector = new CoordStruct(-1, -1, 0);
  29.                     break;
  30.             }
  31.             return vector;
  32.         }
复制代码


 楼主| 发表于 2021-5-5 13:10:12 | 显示全部楼层


MoveTo(location + vector);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2021-5-5 23:50:07 | 显示全部楼层
卧槽这是修了Jumpjet的万年bug吗
发表于 2021-5-6 11:28:52 | 显示全部楼层
卧槽!!
这些是写在哪里的代码呀
 楼主| 发表于 2021-5-6 11:56:11 | 显示全部楼层
蓝蓝蓝 发表于 2021-5-6 11:28
卧槽!!
这些是写在哪里的代码呀

DynmicPatcher,Phobos或者Ares
发表于 2021-5-6 15:36:25 这篇帖子是使用手机发表的! | 显示全部楼层
这就是资深moder的实力么?虽不明,但觉厉,只搞过ini的礼节性路过一下
发表于 2021-5-6 22:24:34 | 显示全部楼层
这是要自己改平台吗?好复杂。。
发表于 2021-5-7 07:02:48 这篇帖子是使用手机发表的! | 显示全部楼层
是直接添加,还是要修改内容。。
发表于 2021-5-7 09:03:01 | 显示全部楼层
硬核干货!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY官方论坛

GMT+8, 2021-10-26 22:59 , Processed in 0.022297 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表