热爱MCsyh
本帖最后由 热爱MCsyh 于 2023-2-1 12:53 编辑

https://www.bilibili.com/blackboard/newplayer.html?playlist=false&crossDomain=1&aid=351051358&page=1
编译后的文件和源码我放在最后了方法很简单,两次根据坐标点与倾斜角a解出直线方程y=kx+b(tan a=k)联立两直线解出交点坐标


如你所见,视频里的演示出现了误差。
误差来源分析:
1.两点坐标是随意取的,或许在运算过程中,小数点被“四舍五入”了一部分(当然,也不好说)
2.获取倾斜角a时,光标中心并未严格对准末影之眼中心,导致直线斜率出现偏差


当然,我们有许多方法减少误差,
比如按住潜行移动到方块边缘以获取近似为整数的坐标。
再比如使得两坐标点连线平行于x轴或z轴(即x1=x2 or z1=z2)。
或者你可以先在草稿纸上画出平面直角坐标系,在边界取点。

或者按住放大镜(假如你装了高清修复)保证坐标中心真的对准了末影之眼中心。


在我后续的测试中,采用了上述的方法,算出来的坐标仅仅只和指令获取的坐标相差4格,最大的误差也不过20来格
如果你不愿意这么麻烦,干脆先跑到程序算出的地点再丢几次末影之眼,也能很快的找到要塞
当然,作为mc玩家,或许没装jdk,至少也有个jre,所以我把编译后的.class文件压缩之后连同源码放到最后了,在cmd中执行
java MinecraftStrong
(应该就可以了吧?如果不行你就当没看见这标成蓝色的字,知道有这个方法就行了。。。“或者,你可以手算?也很快的。”)
MinecraftStrong.zip (1.39 KB, 下载次数: 6)


源码在这:
  1. //我的世界两颗末影之眼定位要塞
  2. import java.util.Scanner;
  3. import java.util.concurrent.TimeUnit;

  4. public class MinecraftStrong {

  5.         public static void main(String[] args) throws InterruptedException {
  6.                 //z=k1x+m
  7.                 //z=k2x+n,此乃直线方程,其中,k=tan a;
  8.                 System.out.println("请输入坐标及角度,每输入一个按一次回车,顺序:x1 z1 a1 x2 y2 a2");
  9.                 System.out.println("其中,x和z分别是两次扔末影之眼的坐标,a是角度");
  10.                 System.out.println("不要问我为什么不做图形用户接口");
  11.                 Scanner a = new Scanner(System.in);
  12.                 Scanner b = new Scanner(System.in);
  13.                 Scanner c = new Scanner(System.in);
  14.                 Scanner d = new Scanner(System.in);
  15.                 Scanner e = new Scanner(System.in);
  16.                 Scanner f = new Scanner(System.in);
  17.                 double x1 = a.nextDouble();
  18.                 double z1 = b.nextDouble();
  19.                 double a1 = c.nextDouble();
  20.                 double x2 = d.nextDouble();
  21.                 double z2 = e.nextDouble();
  22.                 double a2 = f.nextDouble();
  23.                 double k1 = 0;
  24.                 double k2 = 0;
  25.                 double x = 0;
  26.                 double z = 0;
  27.                 double b1 = 0;
  28.                 double b2 = 0;
  29.                 if(a1<0) {
  30.                         b1=-a1;
  31.                 }
  32.                 if(a2<0) {
  33.                         b2=-a2;
  34.                 }
  35.                 if(a1>0) {
  36.                         b1=180-a1;
  37.                 }
  38.                 if(a2>0) {
  39.                         b2=180-a2;
  40.                 }
  41.                 k1 = Math.tan(Math.toRadians(b1));
  42.                 k2 = Math.tan(Math.toRadians(b2));
  43.                 z = (x2-x1+k1*z1-k2*z2)/(k1-k2);
  44.                 x = k1*z+x1-k1*z1;
  45.                 System.out.println("要塞坐标是:x="+x+" y= ? "+"z= "+z);
  46.                 TimeUnit.DAYS.sleep(1);
  47.         }
  48. }
复制代码
补充一下,我这玩意只能说能用,一堆不规范的东东,楼下有大佬写了个优美的优化代码,可以参考!!


Qhxss
这个我听说过几次,但是一直没有实践

开心的阿诺
本帖最后由 开心的阿诺 于 2023-2-1 12:03 编辑

java实现辣么长的吗 ∑(°Д°;

edit:查了一下,看起来是java输入固有问题 xd

热爱MCsyh
开心的阿诺 发表于 2023-2-1 12:00
java实现辣么长的吗 ∑(°Д°;

啊,肯定能简化许多,我这属于屎山代码了qwq。其中最主要的运算集中在几行,半个钟头敲的代码也懒得去优化了

lovemcbest
早就知道了,不过一直没用

WWWWMMM
大脑过载ing

LinGCar
你用一个scanner不就行了吗(((
还有你scanner用完没关闭啊喂(((

热爱MCsyh
LinGCar 发表于 2023-2-1 12:19
你用一个scanner不就行了吗(((
还有你scanner用完没关闭啊喂(((

eclipse告诉我了。。。我没理它哈哈哈

骰出的名字
我曾试图用人算的方式来实现这种方法(结果后来想一想,发现我简直是异想天开

热爱MCsyh
骰出的名字 发表于 2023-2-1 12:36
我曾试图用人算的方式来实现这种方法(结果后来想一想,发现我简直是异想天开 ...

蛙哈哈,我试过,数据太复杂了

LinGCar
  1. import java.util.Scanner;

  2. public class MinecraftStrong {
  3.     public static void main(String[] args) {
  4.         System.out.println("请输入坐标及角度,每输入一个按一次回车,顺序:x1 z1 a1 x2 y2 a2");
  5.         System.out.println("其中,x和z分别是两次扔末影之眼的坐标,a是角度");
  6.         System.out.println("不要问我为什么不做图形用户接口");
  7.         
  8.         Scanner scanner = new Scanner(System.in);
  9.         
  10.         double x1 = scanner.nextDouble();
  11.         double z1 = scanner.nextDouble();
  12.         double a1 = scanner.nextDouble();
  13.         double x2 = scanner.nextDouble();
  14.         double z2 = scanner.nextDouble();
  15.         double a2 = scanner.nextDouble();
  16.         
  17.         double b1 = a1 < 0 ? -a1 : 180 - a1;
  18.         double b2 = a2 < 0 ? -a2 : 180 - a2;
  19.    
  20.         double k1 = Math.tan(Math.toRadians(b1));
  21.         double k2 = Math.tan(Math.toRadians(b2));
  22.         double z = (x2 - x1 + k1 * z1 - k2 * z2) / (k1 - k2);
  23.         double x = k1 * z + x1 - k1 * z1;
  24.    
  25.         System.out.println("要塞坐标是 [" + x + ", ?, " + z + "]");
  26.         scanner.close();
  27.     }
  28. }
复制代码

我拿我的代码思路给你改了一下((

159ABCD
三角函数的噩梦

lipeisong
看了但完全没看懂只能留下一句大佬牛皮

我不是wzx
用c++写了一下,编译完直接是可执行文件应该更容易运行(
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. int main()
  5. {
  6.     cout << "请输入坐标及角度,每输入一个按一次回车,顺序:x1 z1 a1 x2 y2 a2" << endl << "其中,x和z分别是两次扔末影之眼的坐标,a是角度" << endl << "不要问我为什么不做图形用户接口,我不会" << endl;
  7.     double x1, z1, a1, x2, z2, a2;
  8.     cin >> x1 >> z1 >> a1 >> x2 >> z2 >> a2;
  9.     double b1 = a1 < 0 ? -a1 : 180 - a1;
  10.     double b2 = a2 < 0 ? -a2 : 180 - a2;
  11.     double k1 = tan(b1 * acos(-1) / 180);
  12.     double k2 = tan(b2 * acos(-1) / 180);
  13.     double z = (x2 - x1 + k1 * z1 - k2 * z2) / (k1 - k2);
  14.     double x = k1 * z + x1 - k1 * z1;
  15.     cout << "要塞坐标是 [" << x << ", ?, " << z << "]" << endl;
  16.     return 0;
  17. }
复制代码

minestrong.zip (25.17 KB, 下载次数: 3)

VbodV
感觉 无论是楼主 还是评论区 都是大佬啊

LinGCar
VbodV 发表于 2023-2-1 14:47
感觉 无论是楼主 还是评论区 都是大佬啊

你楼上是真大佬

RS_Seeker
其实可以口算的…就是误差大了点

滑稽蜗
谢谢楼主,但是...
我还是老老实实费末影之眼吧qwq

wwt_06
如果我没理解错的话应该是末影之眼的两条射线交点即为末地要塞的吧。不过我记得末影之眼本身就会有角度上的误差?

言射_awa
还挺好用(优化了一下)

Noodles_bro
我选择直接查种子 0消耗、白嫖多香

言射_awa
wsseieiei 发表于 2023-2-1 14:41
用c++写了一下,编译完直接是可执行文件应该更容易运行(

问一个问题,运行之后报错
”找不到libstdc++-6.dll“ 之类的
怎么回事,望解答

我不是wzx
言射_awa 发表于 2023-2-2 22:48
问一个问题,运行之后报错
”找不到libstdc++-6.dll“ 之类的
怎么回事,望解答

缺dll,去装运行库

美用的飞物
本帖最后由 美用的飞物 于 2023-2-2 22:53 编辑

Scanner?感觉有点异端
Java写的交互,提示信息这么多属实罕见。
按照我的习惯,那就是从args里读坐标,NFE就直接蹦--help


Lucier310
拜托,这种真的酷毙了好嘛

DarkLiam
神仙,以后就靠你这找要塞了(

美用的飞物
热爱MCsyh 发表于 2023-2-1 12:21
eclipse告诉我了。。。我没理它哈哈哈

不管IDE警告,是大忌。

zbyu
有一点复杂,但好像挺实用的

第一页 上一页 下一页 最后一页