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.*;

public class Main {
    //qpとabが直行
    //qpの中点はa,bを通る直線上

    public static void main(String... args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = br.readLine()) != null) {
            String[] s = line.split(",");
            double ax = Double.parseDouble(s[0]);
            double ay = Double.parseDouble(s[1]);
            double bx = Double.parseDouble(s[2]);
            double by = Double.parseDouble(s[3]);
            
            double qx = Double.parseDouble(s[4]);
            double qy = Double.parseDouble(s[5]);
            double px = 0.0;
            double py = 0.0;
            if(ax==bx){
                px = qx+(ax-qx)*2;
                py = qy;
            } else if(ay==by){
                px = qx;
                py = qy+(ax-qy)*2;
            } else{
                double alpha = (ay-by)/(ax-bx);
                double beta = ay-ax*alpha;
                px = (2*qy*alpha-2*alpha*beta+qx-alpha*alpha*qx)/(alpha*alpha+1);
                py = (qx-px)/alpha+qy;
            }
            System.out.println(px+" "+py);
        }
    }
}