定义一个目标是在另一个目标

Define a target is in another target

我正在使用 Vuforia 通过摄像头识别目标。

我必须标记:小目标和大目标。 我需要定义较小的目标放在较大的目标内。

我已经能及时看到两个标记了。我可以获得目标的 4x4 矩阵。 其中一个想法是将 4x4 投影到 z0x 平面到两个目标,然后定义一个投影矩阵是否包含第二个。(但我不知道该怎么做)

一些代码如何获取矩阵

- (void) renderFrameWithState:(const Vuforia::State&)state projectMatrix:(Vuforia::Matrix44F&)projectionMatrix {
//some opengl initializations
 for (int i = 0; i < state.getNumTrackableResults(); ++i) {
        // Get the trackable
        const Vuforia::TrackableResult* result = state.getTrackableResult(i);
        const Vuforia::Trackable& trackable = result->getTrackable();

        Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose()); //getPose() returns 3x4 matrix
}
}

将矩阵投影到同一平面很容易 - 如果您有有效的 Vuforia 示例,那么您已经有了这段代码。它是这样的:

SampleUtils::multiplyMatrix(&projectionMatrix.data[0],
                            &modelViewMatrix.data[0] ,
                            &modelViewProjection.data[0]);

但是,我认为您真的不需要投影它们,您可以简单地比较从 Vuforia 获得的两个矩阵。

检查一个矩阵是否在另一个矩阵内部的一种方法(不是 100% 准确,但非常简单)是通过中心点和大小。意思——取一个的中心点(矩阵中的x和y位置值分别为modelViewMatrix.data[12]和modelViewMatrix.data[13]),看看那个点,加上width和高度在第二个矩阵的边界内(同样,通过第二个矩阵中心点、宽度和高度)。