/** Takes a list of DNA genotypes, adjusts tone of voice for text, says text genotype e.g. hair and eye colour 2d: starts with a diamond, made of two triangles (one for skull, one for jaw), made up of lines connected at points. When a point moves, its initial and final points are given. 3d: starts with an octahedron, rest as for 2d 1: compute points for speech 2: determine tone of voice for line talk([HairColour, EyeColour],Text, Text- line of text compute new points for moved triangle newpoints([[0,[0,1,2]],[1,[3,4,5]]],[[0,[0,2]],[1,[0,1]],[2,[1,2]],[3,[3,5]],[4,[3,4]],[5,[4,5]]],[[0,[1,2]],[1,[2,1]],[2,[0,1]],[3,[2,3]],[4,[1,0]],[5,[0,1]]],[1],-1,NewPoints). **/ %% newpoints(+Triangles,+Lines,+Points,+TriangleNumbers,+HeightChange,-NewPoints) newpoints(Triangles,Lines,Points,TriangleNumbers,HeightChange,NewPoints1) :- smallerobjectsfromobjects(TriangleNumbers,[],LineNumbers,Triangles,_,Lines,_), smallerobjectsfromobjects(LineNumbers,[],PointNumbers,Lines,_,Points,_), removeduplicates(PointNumbers,_,_,PointNumbers2), operatevalues(PointNumbers2,Points,Points1,HeightChange,[],NewPoints), append(Points1,NewPoints,NewPoints1). %% smallerobjectsfromobjects(+LargerObjectNumbers,+SmallerObjectNumbers,-SmallerObjectNumbers1,+LargerObjects,-LargerObjects1,+SmallerObjectNumbers,-SmallerObjectNumbers) smallerobjectsfromobjects([],SmallerObjectNumber,SmallerObjectNumber,_,_,_,_). smallerobjectsfromobjects([LargerObjectNumber|LargerObjectNumbers],SmallerObjectNumbers,SmallerObjectNumbers3,LargerObjects,LargerObjects2,SmallerObjectNumbers,SmallerObjectNumbers3) :- delete(LargerObjects,[LargerObjectNumber,SmallerObjectNumbers1],LargerObjects1), append(SmallerObjectNumbers,SmallerObjectNumbers1,SmallerObjectNumbers2), smallerobjectsfromobjects(LargerObjectNumbers,SmallerObjectNumbers2,SmallerObjectNumbers3,LargerObjects1,LargerObjects2,SmallerObjectNumbers2,SmallerObjectNumbers3). %% removeduplicates(+Items,-Items,+List,-List) removeduplicates([],[],List,List) :- !. removeduplicates([Item|Items],Items2,List,List2) :- delete(Items,Item,Items1),append(List,[Item],List1),removeduplicates(Items1,Items2,List1,List2),!. %% operatevalues(+PointNumbers,+Points,+HeightChange,+NewPoints,-NewPoints2) operatevalues([],Points,PointsX,_,NewPoints,NewPoints). operatevalues([PointNumber|PointNumbers],Points,Points2,HeightChange,NewPoints,NewPoints2) :- member(Points,[PointNumber,[X,Y]],Points1), Y2 is Y+HeightChange, append(NewPoints,[[PointNumber,[X,Y2]]],NewPoints1), operatevalues(PointNumbers,Points1,Points2,HeightChange,NewPoints1,NewPoints2). %%operatevalues([PointNumber|PointNumbers],Points,HeightChange,NewPoints,NewPoints2) :- not(member([PointNumber,[X,Y]],Points)), append(NewPoints,[[PointNumber,[X,Y]]],NewPoints1), operatevalues(PointNumbers,Points,HeightChange,NewPoints1,NewPoints2),!.