private boolean canmovelim( XYPoint bf, XYPoint lh, XYPoint le, XYPoint ls, Spring lrad, Spring lhum) { XYPoint lsn = ls.add(bf); Circle lhc = new Circle(lh, lrad.length); Circle lsc = new Circle(lsn, lhum.length); XYPoint[] inter = lhc.intersect(lsc); return inter != null; }
private void domovelim(XYPoint bf, XYPoint lh, XYPoint le, XYPoint ls, Spring lrad, Spring lhum) { XYPoint lsn = ls.add(bf); Circle lhc = new Circle(lh, lrad.length); Circle lsc = new Circle(lsn, lhum.length); XYPoint[] inter = lhc.intersect(lsc); if (inter != null) { double d1 = inter[0].distance(le); double d2 = inter[1].distance(le); if (d1 < d2) { le.set(inter[0]); } else { le.set(inter[1]); } } }
private void movelim(XYPoint lhf, XYPoint lh, XYPoint le, XYPoint ls, Spring lrad, Spring lhum) { XYPoint lhn = lh.add(lhf); Circle lhc = new Circle(lhn, lrad.length); Circle lsc = new Circle(ls, lhum.length); XYPoint[] inter = lhc.intersect(lsc); // still need to check angle constraints if (inter != null) { lh.set(lhn); double d1 = inter[0].distance(le); double d2 = inter[1].distance(le); if (d1 < d2) { le.set(inter[0]); } else { le.set(inter[1]); } } lhf.zero(); }