kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

CGL_1_B: Reflection

こんどは直線について対称な点を求める問題
前回の問題とそっくり

こうでしょ

f:id:kb84tkhr:20190218215516p:plain

これでもう計算はできてしまうけど、もっと簡単な式にできるかもしれない
というところはちょっと気になる

まあでも、ACとれればいいんでしょ?(開き直り
Segmentクラスにひとつメソッドを追加して

    def reflection(self, p: Point) -> Point:
        x = self.projection(p)
        return p + 2 * (x - p)

main()のprojectionreflectionに変えるだけ

def main() -> None:
    x1, y1, x2, y2 = [int(x) for x in input().split()]
    p1 = Point(x1, y1)
    p2 = Point(x2, y2)
    l = Line(p1, p2)

    q = int(input())

    for _ in range(q):
        x, y = [int(x) for x in input().split()]
        p = Point(x, y)
        a = l.reflection(p)
        print(a.x, a.y)

AC
解説もこれ以上式変形はしてなかった

ところでreflectionはSegmentクラスのメソッドじゃなくて
Pointクラスのメソッドだったんじゃないかという気がしないでもない
a = l.reflection(p)じゃなくて
a = p.reflection(l)だったのでは、ということ

なんとなく、だけど