Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับ Dot Product และ Cross Product ของเวกเตอร์สองตัว

โจทย์

เราได้รับเวกเตอร์สองตัว คือเวกเตอร์ A และเวกเตอร์ B ที่มีทิศทาง x, y และ z งานคือหา cross product และ dot product ของอาเรย์เวกเตอร์สองตัวที่กำหนด

เวกเตอร์คืออะไร?

ในคณิตศาสตร์ ปริมาณที่มีขนาดและทิศทางเรียกว่าเวกเตอร์ ในขณะที่ปริมาณที่มีค่าเดียวเป็นขนาดเรียกว่า scalar จุดที่เวกเตอร์เริ่มต้นเรียกว่า initial point และจุดที่เวกเตอร์สิ้นสุดเรียกว่า terminal point ระยะห่างระหว่าง initial point และ terminal point ของเวกเตอร์เรียกว่า magnitude ของเวกเตอร์

ประเภทของเวกเตอร์

  • Unit vector - เวกเตอร์ที่มี magnitude เป็น 1
  • Zero vector - เรียกว่า NULL vector เพราะ initial point และ terminal point เหมือนกัน
  • Coinitial vector - ถ้าสองเวกเตอร์ขึ้นต้นจากจุดเดียวกัน เรียกว่า coinitial vector
  • Collinear vector - ถ้าสองเวกเตอร์ขึ้นอยู่กับเส้นตรงเดียวกัน เรียกว่า collinear vector
  • Equal vector - ถ้าสองเวกเตอร์มี magnitude และทิศทางเท่ากัน เรียกว่า equal vector

Dot Product คืออะไร?

Dot product เรียกอีกอย่างว่า scalar product ซึ่งนิยามว่า -

สมมติเรามีเวกเตอร์ A = a1 * i + a2 * j + a3 * k และ B = b1 * i + b2 * j + b3 * k โดยที่ i, j และ k เป็น unit vectors (ค่าเป็น 1) และ x, y, z เป็นทิศทางของเวกเตอร์ dot product หรือ scalar product เท่ากับ a1 * b1 + a2 * b2 + a3 * b3

Input-: A = 2 * i + 7 * j + 2 * k B = 3 * i + 1 * j + 5 * k Output-: 2 * 3 + 7 * 1 + 2 * 5 = 23

Cross Product คืออะไร?

Cross product เรียกอีกอย่างว่า vector product ซึ่งนิยามว่า -

สมมติเรามีเวกเตอร์ A = a1 * i + a2 * j + a3 * k และ B = b1 * i + b2 * j + b3 * k Cross product เท่ากับ (a2 * b3 - a3 * b2) * i - (a1 * b3 - a3 * b1) * j + (a1 * b2 - a2 * b1) * k โดยที่ a2 * b3 - a3 * b2, a1 * b3 - a3 * b1 และ a1 * b1 - a2 * b1 เป็นค่าสัมประสิทธิ์ของ unit vector และ i, j, k เป็นทิศทางของเวกเตอร์

Input-: A = 2 * i + 7 * j + 2 * k B = 3 * i + 1 * j + 5 * k Output-: (7 * 5 - 2 * 1)i + (2 * 5 - 2 * 3)j - (2 * 1 - 7 * 3)k

อัลกอริทึม

เริ่ม
ขั้นตอน 1 → ประกาศฟังก์ชันคำนวณ dot product ของสองเวกเตอร์
  int dot_product(int vector_a[], int vector_b[])
  ประกาศ int product = 0
  วนลูป For i = 0 ถึง size และ i++
    ตั้งค่า product = product + vector_a[i] * vector_b[i]
  จบวน
  คืนค่า product
ขั้นตอน 2 → ประกาศฟังก์ชันคำนวณ cross product ของสองเวกเตอร์
  void cross_product(int vector_a[], int vector_b[], int temp[])
  ตั้งค่า temp[0] = vector_a[1] * vector_b[2] - vector_a[2] * vector_b[1]
  ตั้งค่า temp[1] = -(vector_a[0] * vector_b[2] - vector_a[2] * vector_b[0])
  ตั้งค่า temp[2] = vector_a[0] * vector_b[1] - vector_a[1] * vector_b[0]
ขั้นตอน 3 → ใน main()
  ประกาศเวกเตอร์ int vector_a[] = { 4, 2, -1 }
  ประกาศเวกเตอร์ int vector_b[] = { 5, 7, 1 }
  ประกาศตัวแปร int temp[size]
  เรียกฟังก์ชัน dot product ว่า dot_product(vector_a, vector_b)
  เรียกฟังก์ชัน cross product ว่า cross_product(vector_a, vector_b)
  วนลูป For i = 0 ถึง size และ i++
    พิมพ์ temp[i]
  จบวน
หยุด

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
#define size 3
using namespace std;
// ฟังก์ชันคำนวณ dot product ของสองเวกเตอร์
int dot_product(int vector_a[], int vector_b[]) {
  int product = 0;
  for (int i = 0; i < size; i++)
    product = product + vector_a[i] * vector_b[i];
  return product;
}
// ฟังก์ชันคำนวณ cross product ของสองเวกเตอร์
void cross_product(int vector_a[], int vector_b[], int temp[]) {
  temp[0] = vector_a[1] * vector_b[2] - vector_a[2] * vector_b[1];
  temp[1] = -(vector_a[0] * vector_b[2] - vector_a[2] * vector_b[0]);
  temp[2] = vector_a[0] * vector_b[1] - vector_a[1] * vector_b[0];
}
int main() {
  int vector_a[] = { 4, 2, -1 };
  int vector_b[] = { 5, 7, 1 };
  int temp[size];
  cout << "Dot product:";
  cout << dot_product(vector_a, vector_b) << endl;
  cout << "Cross product:";
  cross_product(vector_a, vector_b, temp);
  for (int i = 0; i < size; i++)
    cout << temp[i] << " ";
  return 0;
}

ผลลัพธ์

Dot product:33 Cross product:9 -9 18