Problem:
線対称

平面上の異なる 3 点 P1(x1,y1), P2(x2,y2), Q(xq,yq) の座標の組を読み込んで、点 P1 点P2 を通る直線を対称軸として点 Q と線対称の位置にある点 R(x,y) を出力するプログラムを作成してください。なお、点 Q は、その対称軸上にないものとします。

入力

入力は複数のデータセットからなります。各データセットは以下の形式で与えられます。

x1,y1,x2,y2,xq,yq

x1, y1, x2, y2, xq, yq (-100 以上 100 以下の実数) がカンマ区切りで１行に与えられます。

データセットの数は 50 を超えない。

出力

データセットごとに、x, y を空白区切りで 1 行に出力する。出力は実数で 0.0001 以下の誤差を含んでもよい。

Sample Input

1.0,0.0,-1.0,0.0,1.0,1.0
1.0,0.0,0.0,-1.0,3.0,0.0
0.0,1.0,0.0,-1.0,1.0,1.0

Output for the Sample Input

1.000000 -1.000000
1.000000 2.000000
-1.000000 1.000000

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        String format = "%.6f %.6f%n";

        while ((line = br.readLine()) != null) {
            String[] input = line.split(",");
            double x1 = Double.parseDouble(input[0]);
            double y1 = Double.parseDouble(input[1]);
            double x2 = Double.parseDouble(input[2]);
            double y2 = Double.parseDouble(input[3]);
            double xq = Double.parseDouble(input[4]);
            double yq = Double.parseDouble(input[5]);

            if (x1 == x2) {
                double x = (x1 - xq) + x1;
                System.out.printf(format, x, yq);
            } else if (y1 == y2) {
                double y = (y1 - yq) + y1;
                System.out.printf(format, xq, y);
            } else {
                double alpha = (y2 - y1) / (x2 - x1);
                double x = (xq - x1 - y1 / alpha) / 2.0;
                double y = -alpha * (x - xq) + yq;
                System.out.printf(format, x, y);
            }

        }
    }
}