解這類型題目需要平面空間概念,以及久遠的數學公式。
平行四邊形,求第四點
這題比較簡單,就沒寫測試系統
import sys
def inp():
sinp=sys.stdin.readline()
while(sinp!=""):
sinp=sinp.replace("\n","")
coord=list(map(float,sinp.split()))
print("%.3f %.3f"%fourpo(coord))#%.3f是因為只取到小數點後三位
sinp=sys.stdin.readline()
測資讀取
測資會給你(x,y)^4
其中一組是重複的
會組成三角形
0.000 0.000 0.000 1.000 0.000 1.000 1.000 1.000
def fourpo(co):
for i in range(3):#總共比i輪
for j in range(3-i):#每輪比j次
if(co[0+2*i]==co[2*(i+1)+2*j]):#重複的話
x=sum(co[::2])-co[0+2*i]*3#全部座標軸相加,減去重複座標軸三次
y=sum(co[1::2])-co[1+2*i]*3
return x,y
inp()
尋找重複的C點
| 迴圈(i)=3 | 迴圈(j)=3-i | co[0+2^i] | co[2^(i+1)+2^j] |
|---|---|---|---|
| 0 | 0 | 0 | 2 |
| 0 | 1 | 0 | 4 |
| 0 | 2 | 0 | 6 |
| 1 | 0 | 2 | 4 |
| 1 | 1 | 2 | 6 |
| 2 | 0 | 2 | 6 |
| 平行四邊形ABCD公式,A+C=B+D | |||
| 推導後,A=B+D-C | |||
| 重複的那一點必為C | |||
| 所以四點相加後,扣掉重複二點,在減掉公式的C,就是答案。 | |||
| 測資 | B | D | C |
| ----- | -------- | ------------- | - |
| R1= | B | +D | |
| R2= | B | +D | -C |
不難,不過要細心。
感謝撥冗閱讀