Как найти ближайшую точку к лучу в numpy? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить ближайшую точку к лучу в pyOpenGl.

def isectSphere(self, p0, p1, radius):
        # normalized ray direction
        r_dir = np.subtract(p0, p1)
        r_dir = r_dir / np.linalg.norm(r_dir)

        # nearest point on the ray to the sphere
        p0_cpt = np.add(-self.pts[:,:3], p0)
        near_pt = np.add(-r_dir * np.dot(p0_cpt, r_dir), p0)

        # distance to center point
        dist = scipy.spatial.distance.cdist(near_pt, self.pts[:,:3])
        print(dist.min())

        # intersect if dist less or equal the radius of the sphere 
        return dist <= radius


self.mouse_near = glu.gluUnProject(*self.mouse_pos, 0, self.mv_mat, self.p_mat, self.v_rect)
self.mouse_far = glu.gluUnProject(*self.mouse_pos, 1, self.mv_mat, self.p_mat, self.v_rect)
self.isectSphere(self.mouse_near, self.mouse_far, 1000)

Но я нахожусь на уровне получения точки матрицы каждой точки. Как я могу получить ближайшую точку луча, заданную двумя точками в мировых координатах p0 и p1?

Я загружаю облако точек в VBO, а затем после щелчка просматриваю массив numpy находит точку на луче, ближайшую к каждой точке, и вычисляет это расстояние. Мне удалось рассчитать его для каждой точки отдельно, но это заняло много времени, и мое приложение получало стек каждый раз, когда пользователь нажимал. Поэтому я переключился на numpy и попробую сделать это на матрицах.

Заранее благодарю за помощь.

...