试问判平面相等
  • 板块学术版
  • 楼主Piwry
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/7/5 07:52
  • 上次更新2023/11/6 23:38:36
查看原帖
试问判平面相等
105254
Piwry楼主2020/7/5 07:52

这里的平面是(法向量)有向的

一个思路是求出两个平面的法向量,将其分别映射到 x-y 平面求一次极角, x-z 平面求一次极角;如果两个极角都相等则平面相等

(就像球极坐标系那样)

就像这样:

struct plane{
	vect vec[3];
	plane(){}
	plane(vect uu, vect vv, vect ww){ vec[0] =uu, vec[1] =vv, vec[2] =ww; }
	vect normal(){ return (vec[1]-vec[0])/(vec[2]-vec[0]);}
};

inline bool eq(plane p, plane q){
	vect n1 =p.normal(), n2 =q.normal();
	return (eq(atan2(n1.y, n1.x), atan2(n2.y, n2.x)) && eq(atan2(n1.z, n1.x), atan2(n2.z, n2.x)));
}

(里面的函数和结构体名就如字面意思一样...)

可貌似过不了某道题(hdu3662)


题解的判平面相等貌似都是这样的:

bool eq(plane s,plane e)//判断两个面是否为同一面
{
    vect a=s.vec[0],b=s.vec[1],c=s.vec[2];
    return eq(dist(a, e), 0)
           &&eq(dist(b, e), 0)
           &&eq(dist(c, e), 0);
}

即是否某一平面的三个点都在另一平面上;这样对于法向量相反的平面貌似也会判相等?

按原题的意思(求凸包表面数),这样应该是错误的...(不过原题也说了点集不退化成平面...)


求问第一种方式有什么问题

2020/7/5 07:52
加载中...