我正在尝试实现光线跟踪算法,我在计算球形物体的反射光线时遇到了一些麻烦.对于某些特定的光线,反射光线似乎只是通过并与跟踪光线共线.贝娄是我如何记录射线 - 球体交叉点:
bool Sphere::intersectLocal(const ray & r, isect & i) const {
Vec3d P = r.getPosition();
Vec3d D = r.getDirection();
//D.normalize();
double a = dot(D, D);
double b = 2 * dot(P, D);
double c = dot(P, P) - 1;
double delta = b * b - 4 * a * c;
if (delta < 0)
return false;
if (delta == 0) {
double t = -b / 2 * a;
Vec3d Q = P + t * D; …Run Code Online (Sandbox Code Playgroud) 例如,给出一对配对列表
[(1, 2), (1, 3), (1, 4), (2, 1), (3, 1), (4, 1)]
Run Code Online (Sandbox Code Playgroud)
所以,我试图删除对重复,我认为一对是重复if(x,y)==(y,x),例如:(1,2)with(3,1)
我正在生成带有理解列表的列表,它来自一个列表
MyList = [(intA, intB) | x <- integerList, y <- integerList, x /= y]
integerList = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
请注意,我写的第一件事只是我想要发生的事情的一个例子,它不是上面的理解列表的输出.
我最近开始使用Haskell,我该如何解决这个问题?什么是最好的选择?我尝试使用地图,但没有成功,我应该将地图与在其中使用反向的foldl/foldr组合吗?我该怎么办?