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 Ruby (judge verdict: Accepted)

while (line = gets)
  x1, y1, x2, y2, xq, yq = line.chomp.split(",").map{|s| s.to_f}

  vx = x2 - x1
  vy = y2 - y1

  m00 = vx
  m01 = vy
  w0 = xq * vx + yq * vy
  m10 = vy
  m11 = -vx
  w1 = vy * (2 * x1 - xq) - vx * (2 * y1 - yq)

  if m00.abs < m01.abs
    t = m00; m00 = m10; m10 = t
    t = m01; m01 = m11; m11 = t
    t = w0; w0 = w1; w1 = t
  end

  m01 /= m00; w0 /= m00; m00 = 1.0
  m11 -= m01 * m10; w1 -= w0 * m10; m10 = 0.0

  y = w1 / m11
  x = w0 - m01 * y

  printf("%.6f %.6f\n", x, y)
end