from__future__importannotationsimportnumpyasnpfrompydanticimportFieldfrom..baseimportBaseModelNfromtypingimportTYPE_CHECKING,Union,List,Callable,castfrom...mathimport(intersection_line_line,)from..lineimportLineSegment,Ray,InfinityLinefrom..circleimportCircletypeConcreteLine=Union[LineSegment,Ray,InfinityLine]# Type of intersections
[文档]classIntResults(BaseModelN):int_type:ConcreteIntTypenum_results:intresult_points:List[np.ndarray]filter:Callable[[np.ndarray],bool]=Field(default=always_true)def__len__(self)->int:returnself.num_resultsdef__getitem__(self,index:int)->np.ndarray:ifindex<0orindex>=self.num_results:raiseIndexError("Index out of range")returnself.result_points[index]
[文档]deffilt(self,filter:Callable[[np.ndarray],bool])->IntResults:""" 根据给定的过滤函数筛选结果点 - `filter`: 一个函数,接受一个 Point 对象并返回布尔值,表示该点是否满足条件 Returns: 新结果对象 """filtered_points=[pforpinself.result_pointsiffilter(p)]returnIntResults(int_type=self.int_type,num_results=len(filtered_points),result_points=filtered_points,filter=filter)