All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opengis.geometry.primitive.Curve Maven / Gradle / Ivy

There is a newer version: 24.2-oss84-1
Show newest version
/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2011, Open Source Geospatial Foundation (OSGeo)
 *    (C) 2003-2005, Open Geospatial Consortium Inc.
 *
 *    All Rights Reserved. http://www.opengis.org/legal/
 */
package org.opengis.geometry.primitive;

import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;

import java.util.List;
import org.opengis.annotation.Association;
import org.opengis.annotation.UML;
import org.opengis.geometry.coordinate.GenericCurve;

/**
 * Curve with a positive orientation. {@code Curve} is a descendent subtype of {@link Primitive}
 * through {@link OrientablePrimitive}. It is the basis for 1-dimensional geometry. A curve is a
 * continuous image of an open interval and so could be written as a parameterized function such as
 * c(t):(a, b) → En where "t" is a real parameter and
 * En is Euclidean space of dimension n (usually 2 or 3, as determined by the
 * coordinate reference system). Any other parameterization that results in the same image curve,
 * traced in the same direction, such as any linear shifts and positive scales such as 
 * e(t) = c(a + t(b-a)):(0,1) → En,
 *
 * 

is an equivalent representation of the same curve. For the sake of simplicity, {@code Curve}s * should be parameterized by arc length, so that the parameterization operation inherited from * {@link GenericCurve} will be valid for parameters between 0 and the length of the curve. * *

Curves are continuous, connected, and have a measurable length in terms of the coordinate * system. The orientation of the curve is determined by this parameterization, and is consistent * with the tangent function, which approximates the derivative function of the parameterization and * shall always point in the "forward" direction. The parameterization of the reversal of the curve * defined by c(t):(a, b) → En would be defined by a function of * the form s(t) = c(a + b - t):(a, b) → En. * *

A curve is composed of one or more curve segments. Each curve segment within a curve may be * defined using a different interpolation method. The curve segments are connected to one another, * with the end point of each segment except the last being the start point of the next segment in * the segment list. * * @version ISO 19107 * @author Martin Desruisseaux (IRD) * @since GeoAPI 1.0 * @see PrimitiveFactory#createCurve */ @UML(identifier = "GM_Curve", specification = ISO_19107) public interface Curve extends OrientableCurve, GenericCurve { /** * Lists the components {@linkplain CurveSegment curve segments} of {@code Curve}, each of which * defines the direct position of points along a portion of the curve. The order of the * {@linkplain CurveSegment curve segments} is the order in which they are used to trace this * {@code Curve}. For a particular parameter interval, the {@code Curve} and {@link * CurveSegment} agree. * * @return The list of curve segments. Should never be {@code null} neither empty. * @see CurveSegment#getCurve * @see Surface#getPatches * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Segmentation") @UML(identifier = "segment", obligation = MANDATORY, specification = ISO_19107) List getSegments(); /** * Returns the orientable curves associated with this curve. * * @return The orientable curves as an array of length 2. * @see OrientableCurve#getPrimitive * @issue http://jira.codehaus.org/browse/GEO-63 */ @Association("Oriented") @UML(identifier = "proxy", obligation = MANDATORY, specification = ISO_19107) OrientableCurve[] getProxy(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy