/**** timetodo(PositionList,TA,TB,V1A,V2A,V1B,V2B) Given the position of colliding particles over time (s), verifies that the time per frame is as given, and calculates the velocities of the particles (cm/s) before and after the collision. PositionList - Tuple of [FrameNumber, Positions], where Positions is a list of [Position, Letter] tuples, where Letter=a or b T - time per frame timetodo([[0,[[0,'a'],[1,''],[2,''],[3,'b']]], [1,[[0,''],[1,'a'],[2,'b'],[3,'']]], [2,[[0,'a'],[1,''],[2,''],[3,'b']]]],1,V1A,V2A,V1B,V2B). V1A = 1, V2A = V1B, V1B = -1, V2B = 1 . timetodo([[0,[[0,'a'],[1,''],[2,'b'],[3,'']]], [1,[[0,''],[1,'a'],[2,'b'],[3,'']]], [2,[[0,''],[1,'a'],[2,''],[3,'b']]]],1,V1A,V2A,V1B,V2B). V1A = 1, V2A = V1B, V1B = 0, V2B = 1 ; ****/ timetodo(PositionList,T,V1A,V2A,V1B,V2B) :- member([Frame1,Positions1],PositionList), member([Frame2,Positions2],PositionList), member([Frame3,Positions3],PositionList), Frame2 is Frame1 + 1, Frame3 is Frame2 + 1, selectpositions(Positions1,A1,B1), selecttouching(Positions2,A2,B2), selectpositions(Positions3,A3,B3), V1A is (A2-A1)/T, V2A is (A3-A2)/T, V1B is (B2-B1)/T, V2B is (B3-B2)/T. selecttouching(Positions,A,B) :- selectpositions(Positions,A,B), B is A+1. selectpositions(Positions,A,B) :- member([A,a],Positions), member([B,b],Positions).