📜  检查两个向量是否共线

📅  最后修改于: 2021-04-17 14:25:14             🧑  作者: Mango

给定六个表示两个向量的xyz坐标的整数,任务是检查两个给定向量是否共线。

例子:

方法:如果满足以下任一条件,则可以基于两个向量是共线的思想来解决该问题:

  • 如果存在数字n ,则两个向量AB是共线的,因此A = n ·b。
  • 如果两个向量的坐标关系相等,则它们是共线的,即x1 / x2 = y1 / y2 = z1 / z2
    注意:如果向量的分量之一为零,则此条件无效。
  • 如果两个向量的叉积等于NULL向量,则它们是共线的。

因此,要解决该问题,其思想是检查两个给定向量的叉积是否等于NULL向量。如果发现是真的,则打印“是” 。否则,打印No。

下面是上述方法的实现:

C++14
// C++ program for the above approach
#include 
using namespace std;
 
// Function to calculate cross
// product of two vectors
void crossProduct(int vect_A[],
                  int vect_B[],
                  int cross_P[])
{
    // Update cross_P[0]
    cross_P[0]
        = vect_A[1] * vect_B[2]
          - vect_A[2] * vect_B[1];
 
    // Update cross_P[1]
    cross_P[1]
        = vect_A[2] * vect_B[0]
          - vect_A[0] * vect_B[2];
 
    // Update cross_P[2]
    cross_P[2]
        = vect_A[0] * vect_B[1]
          - vect_A[1] * vect_B[0];
}
 
// Function to check if two given
// vectors are collinear or not
void checkCollinearity(int x1, int y1,
                       int z1, int x2,
                       int y2, int z2)
{
    // Store the first and second vectors
    int A[3] = { x1, y1, z1 };
    int B[3] = { x2, y2, z2 };
 
    // Store their cross product
    int cross_P[3];
 
    // Calculate their cross product
    crossProduct(A, B, cross_P);
 
    // Check if their cross product
    // is a NULL Vector or not
    if (cross_P[0] == 0 && cross_P[1] == 0
        && cross_P[2] == 0)
        cout << "Yes";
    else
        cout << "No";
}
 
// Driver Code
int main()
{
    // Given coordinates
    // of the two vectors
    int x1 = 4, y1 = 8, z1 = 12;
    int x2 = 8, y2 = 16, z2 = 24;
 
    checkCollinearity(x1, y1, z1,
                      x2, y2, z2);
 
    return 0;
}


Java
// Java program for the above approach
class GFG{
     
// Function to calculate cross
// product of two vectors
static void crossProduct(int vect_A[],
                         int vect_B[],
                         int cross_P[])
{
     
    // Update cross_P[0]
    cross_P[0] = vect_A[1] * vect_B[2] -
                 vect_A[2] * vect_B[1];
 
    // Update cross_P[1]
    cross_P[1] = vect_A[2] * vect_B[0] -
                 vect_A[0] * vect_B[2];
 
    // Update cross_P[2]
    cross_P[2] = vect_A[0] * vect_B[1] -
                 vect_A[1] * vect_B[0];
}
 
// Function to check if two given
// vectors are collinear or not
static void checkCollinearity(int x1, int y1,
                              int z1, int x2,
                              int y2, int z2)
{
     
    // Store the first and second vectors
    int A[] = { x1, y1, z1 };
    int B[] = { x2, y2, z2 };
 
    // Store their cross product
    int cross_P[] = new int[3];
 
    // Calculate their cross product
    crossProduct(A, B, cross_P);
 
    // Check if their cross product
    // is a NULL Vector or not
    if (cross_P[0] == 0 && cross_P[1] == 0 &&
        cross_P[2] == 0)
        System.out.print("Yes");
    else
        System.out.print("No");
}
 
// Driver Code
public static void main (String[] args)
{
     
    // Given coordinates
    // of the two vectors
    int x1 = 4, y1 = 8, z1 = 12;
    int x2 = 8, y2 = 16, z2 = 24;
 
    checkCollinearity(x1, y1, z1,
                      x2, y2, z2);
}
}
 
// This code is contributed by AnkThon


Python3
# Python3 program for the above approach
 
# Function to calculate cross
# product of two vectors
def crossProduct(vect_A, vect_B, cross_P):
    # Update cross_P[0]
    cross_P[0] = (vect_A[1] * vect_B[2] -
                  vect_A[2] * vect_B[1])
 
    # Update cross_P[1]
    cross_P[1] = (vect_A[2] * vect_B[0] -
                  vect_A[0] * vect_B[2])
 
    # Update cross_P[2]
    cross_P[2] = (vect_A[0] * vect_B[1] -
                  vect_A[1] * vect_B[0])
 
# Function to check if two given
# vectors are collinear or not
def checkCollinearity(x1, y1, z1, x2, y2, z2):
     
    # Store the first and second vectors
    A = [x1, y1, z1]
    B = [x2, y2, z2]
 
    # Store their cross product
    cross_P = [0 for i in range(3)]
 
    # Calculate their cross product
    crossProduct(A, B, cross_P)
 
    # Check if their cross product
    # is a NULL Vector or not
    if (cross_P[0] == 0 and
        cross_P[1] == 0 and
        cross_P[2] == 0):
        print("Yes")
    else:
        print("No")
 
# Driver Code
if __name__ == '__main__':
     
    # Given coordinates
    # of the two vectors
    x1 = 4
    y1 = 8
    z1 = 12
    x2 = 8
    y2 = 16
    z2 = 24
 
    checkCollinearity(x1, y1, z1, x2, y2, z2)
 
# This code is contributed by bgangwar59


输出:
Yes

时间复杂度: O(1)
辅助空间: O(1)