给定在 xy 平面上的一组点,确定由这些点组成的任何矩形的最小面积,其中矩形的边不一定平行于 x 轴和 y 轴。
如果没有任何矩形,就返回 0。
import collections
import itertools
from typing import List
import numpy
classSolution:defminAreaFreeRect(self,points:List[List[int]])->float:
cro,nor=numpy.cross,numpy.linalg.norm
points=[*map(numpy.array,points)]
ans,d=float('inf'),collections.defaultdict(list)for x,y in itertools.combinations(points,2):
p,q=tuple(x+y),nor(x-y)
d[p,q]+=[x-y]for idxs in d.values():for x,y in itertools.combinations(idxs,2):
ans=min(ans,abs(cro(x,y)))return ans/2if ans <float('inf')else0.0input=[[1,2],[2,1],[1,0],[0,1]]
b=Solution()
result = b.minAreaFreeRect(input)print(result)