예제 #1
0
 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;
 }
예제 #2
0
 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]);
     }
   }
 }
예제 #3
0
  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();
  }