Hi,
You can define a function that generates equations and initial conditions for DSolve[] more or less routinely.
Here is an example:
equations = Join[
Thread[D[Through[#1[t]],{t, 2}] == #2] ,
Thread[Join[D[Through[#1[t]],t] /. t -> 0 ,Through[#1[0]]] == #3]
] & ;
Now your original system can be solved as follows:
lhs = {rx, ry};
rhs = {ax , ay};
ini = {0, h, vx, vy} ;
DSolve[equations[lhs, rhs, ini], Through[lhs[t]], t]
For 3D vectors:
lhs = {rx, ry, rz};
rhs = {ax, ay, az};
ini = {0, h, 0, vx, vy, vz} ;
DSolve[equations[lhs, rhs, ini], Through[lhs[t]], t]
Or you can generate all DSolve[] input with one function:
system = Sequence @@ {equations[#1, #2, #3], Through[#1[t]], t} & ;
DSolve[system[lhs, rhs, ini]]