aoj ベクトル 反射 計算幾何学

CGL_1_B 反射

CGL_1_B 反射
Feb. 2, 2020, 1:52 p.m.

目次

問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=CGL_1_B&lang=ja

ベクトルOAがなす直線に対して点Pの線対称の点Qをもとめる問題

解説

前回の問題CGL_1_Aを利用する.
前回射影を求めたので、射影の点をMとするとMはPQのちょうど中点なので、

$$
\vec{OQ} = 2 \vec{PM}
$$

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
void reflection(Vector2 start_, Vector2 end_, Vector2 p) {
    Vector2 v = end_ - start_;
    Vector2 b = start_ + v * (v.dot(p - start_) / v.norm());
    Vector2 op = p + ((b - p) * 2);
    cout << op.x << ' ' << op.y << endl;
}

#define MAX_N 1001
Int N;
Vector2 start_, end_, p;

void input() {
  cin >> start_ >> end_ >> N;
  while (cin >> p) {
    reflection(start_, end_, p);
  }
}

int main() {
  cout.precision(15);
  input();
}