给定六个表示两个向量的x , y和z坐标的整数,任务是检查两个给定向量是否共线。
例子:
Input: x1 = 4, y1 = 8, z1 = 12, x2 = 8, y2 = 16, z2 = 24
Output: Yes
Explanation: The given vectors: 4i + 8j + 12k and 8i + 16j + 24k are collinear.
Input: x1 = 2, y1 = 8, z1 = -4, x2 = 4, y2 = 16, z2 = 8
Output: No
Explanation: The given vectors: 2i + 8j – 4k and 4i + 16j + 8k are not collinear.
方法:如果满足以下任一条件,则可以基于两个向量是共线的思想来解决该问题:
- 如果存在数字n ,则两个向量A和B是共线的,因此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)