code: public Point3d calculate3DCoordinatesSP2_1(Point3d aPoint, Point3d bPoint, Point3d cPoint, double length,
              double angle) {
          //logger.debug("3DCoordinatesSP2_1");
          Vector3d ba = new Vector3d(bPoint);
          ba.sub(aPoint);
          Vector3d ca = new Vector3d(cPoint);
          ca.sub(aPoint);
  
          Vector3d n1 = new Vector3d();
          n1.cross(ba, ca);
          n1.normalize();
  
          Vector3d n2 = rotate(ba, n1, angle);
          n2.normalize();
  
          n2.scale(length);
          Point3d point = new Point3d(aPoint);
          point.add(n2);
          n1 = null;
          n2 = null;
          ba = null;
          ca = null;
          return point;
      }
docs: Calculate new point in B-A-C system. It forms B-A(-X)-C system, where A is
  sp2
  
  @param  aPoint  central point A (Point3d)
  @param  bPoint  B (Point3d)
  @param  cPoint  C (Point3d)
  @param  length  bond length
  @param  angle   angle between B(C)-A-X
  @return         new Point (Point3d)