n,m=map(int,input().split())
board=[input().strip() for _ in range(n)]
count=0
points=[]
point_set=set(points)
for i in range(n):
for j in range(m):
if board[i][j]=="X":
points.append((i,j))
point_set=set(points)
for i in range(len(points)):
x1,y1=points[i]
for j in range(i+1,len(points)):
x2,y2=points[j]
dx=x2-x1
dy=y2-y1
//顺时针
x3,y3=x1+dy,y1-dx
x4,y4=x2+dy,y2-dx
if (x3,y3) in point_set and (x4,y4) in point_set:
count=count+1
//逆时针
x3,y3=x1-dy,y1+dx
x4,y4=x2-dy,y2+dx
if (x3,y3) in point_set and (x4,y4) in point_set:
count=count+1
print(count // 4)
- 向量的基本概念
在平面几何中,两点 (x1, y1) 和 (x2, y2) 之间的向量可以表示为 (dx, dy),其中:
dx = x2 - x1(x 方向的变化量)
dy = y2 - y1(y 方向的变化量)
这个向量表示从点 (x1, y1) 到点 (x2, y2) 的位移。
- 向量旋转的数学原理
若有一个向量 (dx, dy),将其顺时针旋转 90 度后得到的新向量为 (dy, -dx);逆时针旋转 90 度得到的新向量为 (-dy, dx)。
验证旋转后的垂直性:
原向量 (dx, dy) 与旋转后的向量 (dy, -dx) 的点积为:dxdy + dy(-dx) = 0
点积为 0 说明两向量垂直,因此旋转后的向量与原向量垂直
- 正方形的几何特性
如果 (x1, y1) 和 (x2, y2) 是正方形的一条对角线,那么另外两个顶点 (x3, y3) 和 (x4, y4) 必然满足:
(x3, y3) 和 (x4, y4) 是 (x1, y1) 和 (x2, y2) 关于中心点的对称点
对角线向量 (dx, dy) 旋转 90 度后,可以得到从对角线端点到另外两个顶点的向量