修复编写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) {
|
||||
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
|
||||
|
@ -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 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 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 }
|
||||
: (Vector3) { NAN, NAN, NAN };
|
||||
return (t > 1e-6) ? Vector3 { S.x + dir.x * t, S.y + dir.y * t, S.z + dir.z * t }
|
||||
: Vector3 { NAN, NAN, NAN };
|
||||
}
|
||||
|
||||
// 构建平面基底
|
||||
extern __device__ __host__ void compute_basis(Vector3 S, Vector3 T, Vector3* e1, Vector3* e2) {
|
||||
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));
|
||||
*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 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);
|
||||
double ref_sign = ref_cross.z; // 取Z分量判断方向
|
||||
|
||||
|
|
Loading…
Reference in New Issue