修复编写bug
parent
57e998686c
commit
d033151e77
|
|
@ -33,7 +33,7 @@ __device__ __host__ Vector3 vec_cross(Vector3 a, Vector3 b) {
|
||||||
|
|
||||||
__device__ __host__ Vector3 vec_normalize(Vector3 v) {
|
__device__ __host__ Vector3 vec_normalize(Vector3 v) {
|
||||||
double len = sqrt(vec_dot(v, v));
|
double len = sqrt(vec_dot(v, v));
|
||||||
return (len > 1e-12) ? (Vector3) { v.x / len, v.y / len, v.z / len } : v;
|
return (len > 1e-12) ? Vector3 { v.x / len, v.y / len, v.z / len } : v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算视线交点T
|
// 计算视线交点T
|
||||||
|
|
@ -46,18 +46,18 @@ extern __device__ __host__ Vector3 compute_T(Vector3 S, Vector3 ray, double H) {
|
||||||
double C = (S.x * S.x + S.y * S.y) / (a_h * a_h) + S.z * S.z / (WGS84_B * WGS84_B) - 1.0;
|
double C = (S.x * S.x + S.y * S.y) / (a_h * a_h) + S.z * S.z / (WGS84_B * WGS84_B) - 1.0;
|
||||||
|
|
||||||
double disc = B * B - 4 * A * C;
|
double disc = B * B - 4 * A * C;
|
||||||
if (disc < 0) return (Vector3) { NAN, NAN, NAN };
|
if (disc < 0) return Vector3 { NAN, NAN, NAN };
|
||||||
|
|
||||||
double sqrt_d = sqrt(disc);
|
double sqrt_d = sqrt(disc);
|
||||||
double t = fmax((-B - sqrt_d) / (2 * A), (-B + sqrt_d) / (2 * A));
|
double t = fmax((-B - sqrt_d) / (2 * A), (-B + sqrt_d) / (2 * A));
|
||||||
return (t > 1e-6) ? (Vector3) { S.x + dir.x * t, S.y + dir.y * t, S.z + dir.z * t }
|
return (t > 1e-6) ? Vector3 { S.x + dir.x * t, S.y + dir.y * t, S.z + dir.z * t }
|
||||||
: (Vector3) { NAN, NAN, NAN };
|
: Vector3 { NAN, NAN, NAN };
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建平面基底
|
// 构建平面基底
|
||||||
extern __device__ __host__ void compute_basis(Vector3 S, Vector3 T, Vector3* e1, Vector3* e2) {
|
extern __device__ __host__ void compute_basis(Vector3 S, Vector3 T, Vector3* e1, Vector3* e2) {
|
||||||
Vector3 ST = vec_normalize(vec_sub(T, S));
|
Vector3 ST = vec_normalize(vec_sub(T, S));
|
||||||
Vector3 SO = vec_normalize(vec_sub((Vector3) { 0, 0, 0 }, S)); // S->O方向
|
Vector3 SO = vec_normalize(vec_sub(Vector3 { 0, 0, 0 }, S)); // S->O方向
|
||||||
|
|
||||||
*e1 = vec_normalize(vec_cross(ST, SO));
|
*e1 = vec_normalize(vec_cross(ST, SO));
|
||||||
*e2 = vec_normalize(vec_cross(*e1, ST));
|
*e2 = vec_normalize(vec_cross(*e1, ST));
|
||||||
|
|
@ -108,7 +108,7 @@ extern __device__ __host__ Vector3 compute_P(Vector3 S, Vector3 T, double R, dou
|
||||||
|
|
||||||
// 计算参考角度方向
|
// 计算参考角度方向
|
||||||
Vector3 ST_vec = vec_sub(T, S);
|
Vector3 ST_vec = vec_sub(T, S);
|
||||||
Vector3 SO_vec = vec_sub((Vector3) { 0, 0, 0 }, S);
|
Vector3 SO_vec = vec_sub(Vector3 { 0, 0, 0 }, S);
|
||||||
Vector3 ref_cross = vec_cross(SO_vec, ST_vec);
|
Vector3 ref_cross = vec_cross(SO_vec, ST_vec);
|
||||||
double ref_sign = ref_cross.z; // 取Z分量判断方向
|
double ref_sign = ref_cross.z; // 取Z分量判断方向
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue