%% newpoints([[0,[0,1,2]],[1,[3,4,5]]],[[0,[1,2]],[1,[2,1]],[2,[0,1]],[3,[2,3]],[4,[1,0]],[5,[0,1]]],[1],1,NewPoints). /** NewPoints = [[3, [2, 2]], [4, [1, -1]], [5, [0, 0]], [0, [1, 2]], [1, [2, 1]], [2, [0|...]]] ; **/ newpoints(Triangles,Points,TriangleNumbers,VerticalDistance,NewPoints1) :- newpoints1(Triangles,_,TriangleNumbers,[],PointNumbers), operatevalues(PointNumbers,Points,PointsLeft,VerticalDistance,[],NewPoints), append(PointsLeft,NewPoints,NewPoints1). newpoints1(_,[],[],PointNumbers,PointNumbers). newpoints1(Triangles,Triangles2,[TriangleNumber|TriangleNumbers],PointNumbers,PointNumbers3) :- delete(Triangles,[TriangleNumber,PointNumbers1],Triangles1), append(PointNumbers,PointNumbers1,PointNumbers2), newpoints1(Triangles1,Triangles2,TriangleNumbers,PointNumbers2,PointNumbers3). operatevalues([],Points,Points,_,NewPoints,NewPoints). operatevalues([PointNumber|PointNumbers],Points,Points2,VerticalDistance,NewPoints,NewPoints2) :- delete(Points,[PointNumber,[X,Y]],Points1), Y2 is Y-VerticalDistance, append(NewPoints,[[PointNumber,[X,Y2]]],NewPoints1), operatevalues(PointNumbers,Points1,Points2,VerticalDistance,NewPoints1,NewPoints2).