Compute the distance between a point and its projection on a ray. Args: p_p: (3, ) float pointer to xyz p_ro: (3, ) float pointer to xyz of ray origin p_rd: (3, ) float pointer to ray direction (normalized) Returns: dist: float t: float
| 739 | // t: float |
| 740 | // |
| 741 | inline std::tuple<float, float> compute_point_ray_distance_c( |
| 742 | const float * p_p, // (3,) |
| 743 | const float * p_ro, // (3,) |
| 744 | const float * p_rd // (3,) |
| 745 | ) { |
| 746 | float dv[3] = { |
| 747 | p_p[0] - p_ro[0], |
| 748 | p_p[1] - p_ro[1], |
| 749 | p_p[2] - p_ro[2] |
| 750 | }; |
| 751 | |
| 752 | float t = dv[0] * p_rd[0] + dv[1] * p_rd[1] + dv[2] * p_rd[2]; |
| 753 | |
| 754 | float dd[3] = { |
| 755 | p_p[0] - (p_ro[0] + t * p_rd[0]), |
| 756 | p_p[1] - (p_ro[1] + t * p_rd[1]), |
| 757 | p_p[2] - (p_ro[2] + t * p_rd[2]) |
| 758 | }; |
| 759 | |
| 760 | float dist = sqrt(dd[0] * dd[0] + dd[1] * dd[1] + dd[2] * dd[2]); |
| 761 | |
| 762 | return std::make_tuple(dist, t); |
| 763 | } |
| 764 | |
| 765 | |
| 766 |
no outgoing calls
no test coverage detected