-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinecraft求解要塞坐标工具.c
75 lines (69 loc) · 2.57 KB
/
Minecraft求解要塞坐标工具.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h> //I/O标准输入输出流
#include <math.h> //开平方&根号操作
int main(void){
/***********************数据定义区域***********************/
int i,j; //循环(无实意)
double p; //用于稍后的排序
double x[6],y[6]; //指测量坐标 共测量6个点
double k[3],b[3]; //指函数参数 共有3个一次函数
double Rx[3],Ry[3]; //指交点坐标 3个函数共有3个交点
double RL,RH; //指构成三角形的水平宽 铅锤高坐标(结果)
/***********************用户交互区域***********************/
printf("Minecraft 求解地牢坐标工具v1.2 (制作:b站小泠君丶)\n\n");
printf("<现在,请输入你的测量数据>\n\n");
j=-1;
for(i=1;i<4;i++){ //循环3次获取坐标位置
j++;
printf("输入第%d次的原地x坐标:",i);
scanf("%lf",&x[j]);
printf("输入第%d次的原地y坐标:",i);
scanf("%lf",&y[j]);
j++;
printf("输入第%d次的末影之眼x坐标:",i);
scanf("%lf",&x[j]);
printf("输入第%d次的末影之眼y坐标:",i);
scanf("%lf",&y[j]);
printf("\n");
}
/**********************求并解函数解析式********************/
j=0;
for(i=0;i<3;i++){
k[i]=(y[j+1]-y[j])/(x[j+1]-x[j]); //求解系数k
b[i]=y[j]-(x[j]*k[i]); //求解常数项b
j+=2;
}
for(i=0;i<2;i++){
Rx[i]=(b[i]-b[i+1])/(k[i+1]-k[i]); //求解交点(1-2/2-3)
Ry[i]=Rx[i]*k[i]+b[i]; //y=kx+b
}
Rx[2]=(b[2]-b[0])/(k[0]-k[2]); //求解交点(1-3)
Ry[2]=Rx[2]*k[2]+b[2];
/***********************误差确认区域***********************/
//排序算法 排列三个交点Rx与Ry p作为交换变量
if(Rx[0]<Rx[1]){
p=Rx[0]; Rx[0]=Rx[1]; Rx[1]=p;
}if(Rx[0]<Rx[2]){
p=Rx[0]; Rx[0]=Rx[2]; Rx[2]=p;
}if(Rx[1]<Rx[2]){
p=Rx[1]; Rx[1]=Rx[2]; Rx[2]=p;
}if(Ry[0]<Ry[1]){
p=Ry[0]; Ry[0]=Ry[1]; Ry[1]=p;
}if(Ry[0]<Ry[2]){
p=Ry[0]; Ry[0]=Ry[2]; Ry[2]=p;
}if(Ry[1]<Ry[2]){
p=Ry[1]; Ry[1]=Ry[2]; Ry[2]=p;
}
/*此时大小排列:Rx[0]>Rx[1]>Rx[2] 即L=Rx[0]-Rx[2];*/
RL=0.5*(Rx[0]+Rx[2]); RH=0.5*(Ry[0]+Ry[2]);
/***********************用户交互区域***********************/
printf("成功计算!地牢坐标位于(%lf,%lf)处!\n\n",RL,RH);
printf("----------------调试信息-----------------\n");
printf("确认输入:第一次 (%.2lf,%.2lf) (%.2lf,%.2lf)\n",x[0],y[0],x[1],y[1]);
printf("确认输入:第二次 (%.2lf,%.2lf) (%.2lf,%.2lf)\n",x[2],y[2],x[3],y[3]);
printf("确认输入:第三次 (%.2lf,%.2lf) (%.2lf,%.2lf)\n",x[4],y[4],x[5],y[5]);
printf("确认解析:y=%.2lfx%+.2lf y=%.2lfx%+.2lf y=%.2lfx%+.2lf\n",k[0],b[0],k[1],b[1],k[2],b[2]);
printf("确认交点:(%.2lf,%.2lf) (%.2lf,%.2lf) (%.2lf,%.2lf)\n",Rx[0],Ry[0],Rx[1],Ry[1],Rx[2],Ry[2]);
printf("\n按<任意键>退出本程序.");
getch();
return 0;
}