向量運算的一些模板(一)
阿新 • • 發佈:2021-07-31
因為帶測試資料,所以就稍微分開一些。
以下有向量加減法、求斜率、求一堆點中一條直線能包括的最多點的數量、點積運算
一名電腦科學與技術的女大學生~#include <iostream> #include <cstdio> #include <algorithm> using namespace std; double ax[5] = {1, 2, 3, 9, 10}; double ay[5] = {1, 2, 3, 10, 11}; //為了方便全部都是double型 //兩個向量的加減法,x1 +- x2,y1 +- y2 void addAndSub(double x1, double y1, double x2, double y2){ double x = x1 + x2; double y = y1 + y2; //看題目情況,不知道返回值要帶啥 cout << "x = " << x << endl; cout << "y = " << y << endl; } //求斜率 double sumK(double x, double y){ double k = y / x; //以(0, 0)為原點的話,不然需要帶上(x0, y0)求差值再算 return k; } //求斜率的延伸,求有多少個點在(x1, y1)and(x2, y2)的連線上POJ1118 int sumOfPoint(int n){ int maxSum = 2; //最初肯定有兩個點在這個線上 for(int i = 0; i < n; i++){ //資料都存放在陣列當中,令j = i + 1就避免了重複計算 for(int j = i + 1; j < n; j++){ int sum = 2; for(int k = j + 1; k < n; k++){ //這裡以我的風格是ax存放x的值,ay存放y的值 if((ax[i] - ax[j]) * (ay[i]- ay[k]) == (ax[i] - ax[k]) * (ay[i] - ay[j])){ sum++; } } if(sum > maxSum){ maxSum = sum; } } } return maxSum; } //點積運算 double Dot(double x1, double y1, double x2, double y2){ return x1 * x2 + y1 * y2; } int main(){ //測試點(2, 1)and(1, 1)相加 cout << "測試點(2, 1)and(1, 1)相加" << endl; addAndSub(2, 1, 1, 1); //測試多個點中一條線能覆蓋最多的點 cout << "測試多個點中一條線能覆蓋最多的點(應該輸出3)" << endl; cout << sumOfPoint(5) << endl; //應該輸出3 //測試點(1, 1)and(1, 1)的點積運算(以(0, 0)為原點 cout << "測試點(1, 1)and(1, 1)的點積運算(應該輸出2)" << endl; cout << Dot(1, 1, 1, 1) << endl; return 0; }