矢量运算的一些模板(一)

因为带测试数据,所以就稍微分开一些。
以下有矢量加减法、求斜率、求一堆点中一条直线能包括的最多点的数量、点积运算

#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;
}

矢量运算的一些模板(一)

上一篇:redis cluster个人梳理-鸡零狗碎


下一篇:e.printStackTrace() 太多,造成微服务请求不通,nginx访问不