package com.revolsys.geometry.algorithm;
import java.util.function.Consumer;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.coordinates.LineSegmentUtil;
import com.revolsys.geometry.model.segment.LineSegment;
public class PointInArea extends RayCrossingCounter implements Consumer<LineSegment> {
private double minDistance;
public PointInArea(final GeometryFactory geometryFactory, final double x, final double y) {
super(x, y);
if (geometryFactory != null && !geometryFactory.isFloating()) {
this.minDistance = geometryFactory.getResolutionX();
} else {
this.minDistance = Double.NaN;
}
}
@Override
public void accept(final LineSegment segment) {
final double x1 = segment.getX(0);
final double y1 = segment.getY(0);
final double x2 = segment.getX(1);
final double y2 = segment.getY(1);
if (!Double.isNaN(this.minDistance)) {
final double x = getX();
final double y = getY();
final double distance = LineSegmentUtil.distanceLinePoint(x1, y1, x2, y2, x, y);
if (distance < this.minDistance) {
setPointOnSegment(true);
return;
}
}
countSegment(x1, y1, x2, y2);
}
}