Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 209|回复: 5

[编程求助] 关于Location.getDirection方法

[复制链接]
轻光233 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1437
钻石
性别
保密
注册时间
2017-8-20
查看详细资料
 楼主| 发表于 2019-11-17 13:55:23 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

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

x
该如何使用getDirection方法返回的向量反推出yaw和pitch
求dalao解答

丿Playboy 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
966
钻石
性别
保密
注册时间
2013-6-29
查看详细资料
发表于 2019-11-17 15:56:08 | 显示全部楼层
直接用Location的getYaw()不行吗

评分

参与人数 1人气 +1 收起 理由
轻光233 + 1 原先的Location不可知

查看全部评分

回复

使用道具 举报

丿Playboy 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
966
钻石
性别
保密
注册时间
2013-6-29
查看详细资料
发表于 2019-11-17 16:16:37 | 显示全部楼层
丿Playboy 发表于 2019-11-17 15:56
直接用Location的getYaw()不行吗

你是什么应用场景  没有Location却要用getDirection
回复

使用道具 举报

轻光233 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1437
钻石
性别
保密
注册时间
2017-8-20
查看详细资料
 楼主| 发表于 2019-11-17 16:19:59 | 显示全部楼层
丿Playboy 发表于 2019-11-17 16:16
你是什么应用场景  没有Location却要用getDirection

重点不在getDirection
重点在一个Vector如何推出yaw和pitch
回复

使用道具 举报

丿Playboy 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
966
钻石
性别
保密
注册时间
2013-6-29
查看详细资料
发表于 2019-11-17 16:34:09 | 显示全部楼层
轻光233 发表于 2019-11-17 16:19
重点不在getDirection
重点在一个Vector如何推出yaw和pitch

似乎没啥现成的办法,你试试通过xyz相对原点的偏移来推,但是我觉得很麻烦
回复

使用道具 举报

Ir.Nep 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
4085
钻石
性别
保密
注册时间
2013-12-1
查看详细资料
发表于 2019-11-17 18:08:13 | 显示全部楼层
本帖最后由 Ir.Nep 于 2019-11-17 18:11 编辑

1、用魔法打败魔法
  1. Location loc = new Location(null, x, y, z).setDirection(向量);
  2. loc.getYaw();
  3. loc.getPitch();
复制代码


2、参考Location源码
  1. public Location setDirection(Vector vector) {
  2.     double x = vector.getX();
  3.     double z = vector.getZ();
  4.     if ((x == 0.0D) && (z == 0.0D)) {
  5.       this.pitch = (vector.getY() > 0.0D ? -90 : 90);
  6.       return this;
  7.     }
  8.     double theta = Math.atan2(-x, z);
  9.     this.yaw = ((float)Math.toDegrees((theta + 6.283185307179586D) % 6.283185307179586D));
  10.    
  11.     double x2 = NumberConversions.square(x);
  12.     double z2 = NumberConversions.square(z);
  13.     double xz = Math.sqrt(x2 + z2);
  14.     this.pitch = ((float)Math.toDegrees(Math.atan(-vector.getY() / xz)));
  15.    
  16.     return this;
  17. }
复制代码

评分

参与人数 2人气 +3 金粒 +20 收起 理由
丿Playboy + 1 + 10 学到了
轻光233 + 2 + 10 xswl哈哈哈哈谢谢dalao

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-12-14 05:23 , Processed in 0.043330 second(s), Total 14, Slave 13 queries, Release: Build.2019.12.06.1150, Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

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