generalize dot rather than hack quadrance