public double getDistance(Vector<VivaeObject> objects) {
    GeneralPath thisPath = new GeneralPath(this.getTransformedShape());
    PathIntersection pi = new PathIntersection();
    Point2D.Double[] points;
    double dist = ray_length;
    double nd;
    for (VivaeObject vivaeObject : objects) {
      if (vivaeObject != this.owner) {
        GeneralPath gp = new GeneralPath(vivaeObject.getTransformedShape());
        points = pi.getIntersections(thisPath, gp);
        for (Point2D.Double point : points) {
          nd = pi.euclideanDistance(point.getX(), point.getY(), owner.getX(), owner.getY());
          if (nd < dist) {
            dist = nd;
          }
          // System.out.println(dist);
        }
      }
    }

    opacity = Math.max((float) (1d - (dist / ray_length)), opacity);
    opacityOfRay = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity);

    return 1d - (dist / ray_length);
  }
 /**
  * Method intersects area of Sensor and all VivaeObjects and returns those that have non-zero
  * intersection.
  *
  * @param objects Vector of VivaeObjects that are checked for collision with the body of Sensor.
  * @return Vector of VivaeObjects that are in collision with the body of Sensor.
  */
 public Vector<VivaeObject> getVivaesOnSight(Vector<VivaeObject> objects) {
   Vector<VivaeObject> objectsOnSight = new Vector<VivaeObject>();
   // for (VivaeObject vivaeObject : objects) {
   GeneralPath thisPath = new GeneralPath(this.getTransformedShape());
   PathIntersection pi = new PathIntersection();
   Point2D.Double[] points;
   for (VivaeObject vivaeObject : getCloseVivaes(objects)) {
     if (vivaeObject != this.owner) {
       GeneralPath gp = new GeneralPath(vivaeObject.getTransformedShape());
       points = pi.getIntersections(thisPath, gp);
       /*
       for(Point2D.Double point : points){
       System.out.println("x = "+point.getX()+" y = "+point.getY());
       System.out.println("owner x = "+owner.getX()+" owner y = "+owner.getY());
       System.out.println(pi.euclideanDistance(point.getX(),point.getY(),owner.getX(),owner.getY()));
       }*/
       if (points.length > 0) {
         objectsOnSight.add(vivaeObject);
       }
       /*Area actArea = (Area) vivaeObject.getArea().clone();
       actArea.intersect(this.getArea());
       if (!actArea.isEmpty()) objectsOnSight.add(vivaeObject);             */
       //             if(vivaeObject instanceof roboneat.RoboNeatRobot)System.out.println("robot
       // seen by"+this.owner);
     }
   }
   return objectsOnSight;
 }