二维坐标下的运算

在二维图中,常常遇到一些需要大量坐标运算的题目,这时可以封装一个Point类,实现坐标高效运算。

// #define LOCAL
#include<iostream>
#include<queue>
#include<map>
using namespace std;
#define _for(i,a,b) for(int i = (a); i < (b); i++) 
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)

// 二维图涉及到坐标加减问题的时候 可以定义Point类
struct Point {
  int x, y;
  Point(int x = 0, int y = 0) : x(x) , y(y) {}
};

using Vector = Point;
using IPair = pair<int, int> ;

Vector operator+(const Vector& v1, const Vector& v2) {
  return Vector(v1.x+v2.x , v1.y+v2.y);
}

Vector operator-(const Vector& v1, const Vector& v2) {
  return Vector(v1.x-v2.x , v1.y-v2.y);
}

Vector operator*(const Vector& v1, const int& k) {
  return Vector(v1.x*k , v1.y*k);
}

Vector operator/(const Vector& v1, const int& k) {
  return Vector(v1.x/k , v1.y/k);
}

bool operator==(const Vector& v1, const Vector& v2) {
  return v1.x==v2.x && v1.y==v2.y;
}

bool inRange(int x, int l, int r) {
  return (l > r) ? inRange(x, r, l) : (l <= x && x <= r);
}

const int N = 100;
Vector dir[] = {{1,1}, {1,-1}, {-1,1}, {-1,-1}};
int n, m, k;

bool isValid(Vector& p) {
  return inRange(p.x, 0, n-1) && inRange(p.y, 0, m-1); 
}

int readint() {
  int x; cin >> x; return x;
}

constexpr int maxn = 1024;

int main() {

  return 0;
}
posted @ 2025-09-25 20:49  雾岛春颂  阅读(7)  评论(0)    收藏  举报