亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? noding.h

?? 一個很好的vc代碼
?? H
字號:
/********************************************************************** * $Id: noding.h,v 1.5 2004/11/04 19:08:07 strk Exp $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * ********************************************************************** * $Log: noding.h,v $ * Revision 1.5  2004/11/04 19:08:07  strk * Cleanups, initializers list, profiling. * * Revision 1.4  2004/11/01 16:43:04  strk * Added Profiler code. * Temporarly patched a bug in DoubleBits (must check drawbacks). * Various cleanups and speedups. * * Revision 1.3  2004/07/19 13:19:31  strk * Documentation fixes * * Revision 1.2  2004/07/08 19:34:49  strk * Mirrored JTS interface of CoordinateSequence, factory and * default implementations. * Added DefaultCoordinateSequenceFactory::instance() function. * * Revision 1.1  2004/07/02 13:20:42  strk * Header files moved under geos/ dir. * * Revision 1.12  2004/07/01 14:12:44  strk * * Geometry constructors come now in two flavors: * 	- deep-copy args (pass-by-reference) * 	- take-ownership of args (pass-by-pointer) * Same functionality is available through GeometryFactory, * including buildGeometry(). * * Revision 1.11  2004/06/16 13:13:25  strk * Changed interface of SegmentString, now copying CoordinateSequence argument. * Fixed memory leaks associated with this and MultiGeometry constructors. * Other associated fixes. * * Revision 1.10  2004/05/07 07:57:27  strk * Added missing EdgeNodingValidator to build scripts. * Changed SegmentString constructor back to its original form * (takes const void *), implemented local tracking of "contexts" * in caller objects for proper destruction. * * Revision 1.9  2004/05/06 15:54:15  strk * SegmentNodeList keeps track of created splitEdges for later destruction. * SegmentString constructor copies given Label. * Buffer operation does no more leaks for doc/example.cpp * * Revision 1.8  2004/05/03 22:56:44  strk * leaks fixed, exception specification omitted. * * Revision 1.7  2004/04/30 09:15:28  strk * Enlarged exception specifications to allow for AssertionFailedException. * Added missing initializers. * * Revision 1.6  2004/04/23 00:02:18  strk * const-correctness changes * * Revision 1.5  2004/04/19 16:14:52  strk * Some memory leaks plugged in noding algorithms. * * Revision 1.4  2004/04/19 12:51:01  strk * Memory leaks fixes. Throw specifications added. * * Revision 1.3  2004/04/14 09:30:48  strk * Private iterated noding funx now use int* instead of vector to know * when it's time to stop. * * Revision 1.2  2004/03/26 07:48:30  ybychkov * "noding" package ported (JTS 1.4) * * **********************************************************************/#ifndef GEOS_NODING_H#define GEOS_NODING_H#include <string>#include <vector>#include <set>#include <geos/platform.h>#include <geos/geom.h>#include <geos/geomgraph.h>#include <geos/geosAlgorithm.h>using namespace std;namespace geos {/* * Represents an intersection point between two {@link SegmentString}s. * */class SegmentNode {public:	Coordinate *coord;   // the point of intersection	int segmentIndex;   // the index of the containing line segment in the parent edge	double dist;        // the edge distance of this point along the containing line segment	SegmentNode(Coordinate *newCoord, int nSegmentIndex, double newDist);	virtual ~SegmentNode();	/**	* @return -1 this EdgeIntersection is located before the argument location	* @return 0 this EdgeIntersection is at the argument location	* @return 1 this EdgeIntersection is located after the argument location	*/	int compare(int cSegmentIndex,double cDist);	bool isEndPoint(int maxSegmentIndex);	int compareTo(void* obj);	string print();};struct SegmentNodeLT {	bool operator()(SegmentNode *s1, SegmentNode *s2) const {		return s1->compareTo(s2)<0;	}};class SegmentString;/* * A list of the {@link SegmentNode}s present along a * noded {@link SegmentString}. * */class SegmentNodeList {private:	set<SegmentNode*,SegmentNodeLT> *nodes;	const SegmentString *edge;  // the parent edge	vector<SegmentNode*> *sortedNodes;	// This vector is here to keep track of created splitEdges	vector<SegmentString*> splitEdges;	// This vector is here to keep track of created Coordinates	vector<CoordinateSequence*> splitCoordLists;	void checkSplitEdgesCorrectness(vector<SegmentString*> *splitEdges);	/**	* Create a new "split edge" with the section of points between	* (and including) the two intersections.	* The label for the new edge is the same as the label for the parent edge.	*/	SegmentString* createSplitEdge(SegmentNode *ei0, SegmentNode *ei1);public:	SegmentNodeList(const SegmentString *newEdge);	virtual ~SegmentNodeList();	/**	* Adds an intersection into the list, if it isn't already there.	* The input segmentIndex and dist are expected to be normalized.	* @return the SegmentIntersection found or added	*/	SegmentNode* add(Coordinate *intPt, int segmentIndex, double dist);	/**	* returns the set of SegmentNodes	*/	//replaces iterator()	set<SegmentNode*,SegmentNodeLT>* getNodes() { return nodes; }	/**	* Adds entries for the first and last points of the edge to the list	*/	void addEndpoints();	/**	* Creates new edges for all the edges that the intersections in this	* list split the parent edge into.	* Adds the edges to the input list (this is so a single list	* can be used to accumulate all split edges for a Geometry).	*/	void addSplitEdges(vector<SegmentString*> *edgeList);	string print();};/* * Contains a list of consecutive line segments which can be used to node the segments. * The line segments are represented by an array of {@link Coordinate}s. * */class SegmentString {private:	SegmentNodeList *eiList;	const CoordinateSequence *pts;	const void* context;	bool isIsolatedVar;public:	/**	 * This function copies given CoordinateSequence	 */	SegmentString(const CoordinateSequence *newPts, const void* newContext);	virtual ~SegmentString();	const void* getContext() const;	SegmentNodeList* getIntersectionList() const;	int size() const;	const Coordinate& getCoordinate(int i) const;	CoordinateSequence* getCoordinates() const;	const CoordinateSequence* getCoordinatesRO() const;	void setIsolated(bool isIsolated);	bool isIsolated() const;	bool isClosed() const;	/**	* Adds EdgeIntersections for one or both	* intersections found for a segment of an edge to the edge intersection list.	*/	void addIntersections(LineIntersector *li,int segmentIndex, int geomIndex);	/**	* Add an SegmentNode for intersection intIndex.	* An intersection that falls exactly on a vertex	* of the SegmentString is normalized	* to use the higher of the two possible segmentIndexes	*/	void addIntersection(LineIntersector *li, int segmentIndex, int geomIndex, int intIndex);	/**	* Add an EdgeIntersection for intersection intIndex.	* An intersection that falls exactly on a vertex of the edge is normalized	* to use the higher of the two possible segmentIndexes	*/	void addIntersection(Coordinate& intPt, int segmentIndex);	void addIntersection(Coordinate& intPt, int segmentIndex, double dist);};/* * Computes the intersections between two line segments in {@link SegmentString}s * and adds them to each string. * The {@link nodingSegmentIntersector} is passed to a {@link Noder}. * The {@link addIntersections} method is called whenever the {@link Noder} * detects that two SegmentStrings <i>might</i> intersect. * This class is an example of the <i>Strategy</i> pattern. * */class nodingSegmentIntersector {private:	/**	* These variables keep track of what types of intersections were	* found during ALL edges that have been intersected.	*/	bool hasIntersectionVar;	bool hasProperVar;	bool hasProperInteriorVar;	bool hasInteriorVar;	// the proper intersection point found	Coordinate *properIntersectionPoint;	LineIntersector *li;	bool recordIsolated;	bool isSelfIntersectionVar;	/**	* A trivial intersection is an apparent self-intersection which in fact	* is simply the point shared by adjacent line segments.	* Note that closed edges require a special check for the point shared by the beginning	* and end segments.	*/	bool isTrivialIntersection(SegmentString *e0, int segIndex0, SegmentString *e1, int segIndex1);public:	static bool isAdjacentSegments(int i1, int i2);	int numIntersections;	int numInteriorIntersections;	int numProperIntersections;	// testing only	int numTests;	nodingSegmentIntersector(LineIntersector *newLi);	LineIntersector* getLineIntersector();	/**	* @return the proper intersection point, or <code>null</code> if none was found	*/	Coordinate* getProperIntersectionPoint();	bool hasIntersection();	/**	* A proper intersection is an intersection which is interior to at least two	* line segments.  Note that a proper intersection is not necessarily	* in the interior of the entire Geometry, since another edge may have	* an endpoint equal to the intersection, which according to SFS semantics	* can result in the point being on the Boundary of the Geometry.	*/	bool hasProperIntersection();	/**	* A proper interior intersection is a proper intersection which is <b>not</b>	* contained in the set of boundary nodes set for this nodingSegmentIntersector.	*/	bool hasProperInteriorIntersection();	/**	* An interior intersection is an intersection which is	* in the interior of some segment.	*/	bool hasInteriorIntersection();	/**	* This method is called by clients	* of the {@link nodingSegmentIntersector} class to process	* intersections for two segments of the {@link SegmentStrings} being intersected.	* Note that some clients (such as {@link MonotoneChain}s) may optimize away	* this call for segment pairs which they have determined do not intersect	* (e.g. by an disjoint envelope test).	*/	void processIntersections(SegmentString *e0, int segIndex0,SegmentString *e1, int segIndex1);};/* * Computes all intersections between segments in a set of {@link SegmentString}s. * Intersections found are represented as {@link SegmentNode}s and add to the * {@link SegmentString}s in which they occur. * */class Noder {public:	static vector<SegmentString*>* getNodedEdges(vector<SegmentString*>* segStrings);	static void getNodedEdges(vector<SegmentString*>* segStrings,vector<SegmentString*>* resultEdgelist);	nodingSegmentIntersector *segInt;public:	Noder(){};	virtual void setSegmentIntersector(nodingSegmentIntersector *newSegInt);	virtual vector<SegmentString*>* node(vector<SegmentString*>* segStrings)=0;};/* * Nodes a set of {@link SegmentString}s by * performing a brute-force comparison of every segment to every other one. * This has n^2 performance, so is too slow for use on large numbers * of segments. * */class SimpleNoder: public Noder {public:	SimpleNoder(){};	virtual vector<SegmentString*>* node(vector<SegmentString*> *inputSegStrings);private:	virtual void computeIntersects(SegmentString *e0, SegmentString *e1);};/* * Validates that a collection of {@link SegmentString}s is correctly noded. * Throws an appropriate exception if an noding error is found. * */class NodingValidator {public:	NodingValidator(vector<SegmentString*> *newSegStrings);	virtual ~NodingValidator();	void checkValid();private:	LineIntersector *li;	vector<SegmentString*> *segStrings;	void checkProperIntersections();	void checkProperIntersections(SegmentString *ss0, SegmentString *ss1);	void checkProperIntersections(SegmentString *e0, int segIndex0, SegmentString *e1, int segIndex1);	/**	*@return true if there is an intersection point which is not an endpoint of the segment p0-p1	*/	bool hasInteriorIntersection(LineIntersector *aLi, Coordinate& p0, Coordinate& p1);	void checkNoInteriorPointsSame();	void checkNoInteriorPointsSame(const Coordinate& testPt,vector<SegmentString*> *segStrings);};/* * Nodes a set of SegmentStrings using a index based * on indexMonotoneChain and a SpatialIndex. * The SpatialIndex used should be something that supports * envelope (range) queries efficiently (such as a Quadtree * or STRtree. * */class MCQuadtreeNoder: public Noder {public:	MCQuadtreeNoder();	virtual ~MCQuadtreeNoder();	vector<SegmentString*>* node(vector<SegmentString*> *inputSegStrings);	class SegmentOverlapAction: public MonotoneChainOverlapAction {		private:			nodingSegmentIntersector *si;		public:			SegmentOverlapAction(nodingSegmentIntersector *newSi);			void overlap(indexMonotoneChain *mc1, int start1, indexMonotoneChain *mc2, int start2);	};private:	vector<indexMonotoneChain*> *chains;	SpatialIndex *index;	int idCounter;	// statistics	int nOverlaps;	void intersectChains();	void add(SegmentString *segStr);};/* * Nodes a set of SegmentStrings completely. * The set of segmentStrings is fully noded; * i.e. noding is repeated until no further * intersections are detected. * <p> * Iterated noding using a FLOATING precision model is not guaranteed to converge, * due to roundoff error.   This problem is detected and an exception is thrown. * Clients can choose to rerun the noding using a lower precision model. * */class IteratedNoder {private:	/**	* Node the input segment strings once	* and create the split edges between the nodes	*/	vector<SegmentString*>* node(vector<SegmentString*> *segStrings, int *numInteriorIntersections);	const PrecisionModel *pm;	LineIntersector *li;public:	IteratedNoder(const PrecisionModel *newPm);	virtual ~IteratedNoder();	/**	* Fully nodes a list of {@link SegmentStrings}, i.e. peforms noding iteratively	* until no intersections are found between segments.	* Maintains labelling of edges correctly through	* the noding.	*	* @param segStrings a collection of SegmentStrings to be noded	* @return a collection of the noded SegmentStrings	* @throws TopologyException if the iterated noding fails to converge.	*/	vector<SegmentString*>* node(vector<SegmentString*> *segStrings); // throw(GEOSException *);};}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性猛交xxxxxx富婆| 久久国产精品色婷婷| 亚洲一区在线观看免费| 美日韩一区二区三区| 99久久精品费精品国产一区二区| 欧美日韩大陆在线| 亚洲欧美日韩成人高清在线一区| 国产在线精品一区二区不卡了| 色噜噜夜夜夜综合网| 亚洲国产精品成人久久综合一区| 午夜久久久影院| 91久久人澡人人添人人爽欧美| 国产日本欧洲亚洲| 青青国产91久久久久久| 亚洲国产精品人人做人人爽| 午夜一区二区三区在线观看| 一本高清dvd不卡在线观看| 26uuu欧美日本| 蜜桃视频在线一区| 欧美一区二区福利在线| 亚洲一区二区三区四区五区黄| 成人97人人超碰人人99| 日本一区二区三区四区 | 精品日韩一区二区三区 | 婷婷成人激情在线网| 91网站最新地址| 中文字幕永久在线不卡| jlzzjlzz亚洲日本少妇| 久久久99久久精品欧美| 国产风韵犹存在线视精品| 精品美女一区二区| 亚洲成a人在线观看| 亚洲一二三四在线| 欧美日韩国产天堂| 日韩精品一区二区三区视频在线观看| 亚洲欧美偷拍三级| 色8久久精品久久久久久蜜| 亚洲天堂2014| 91久久免费观看| 亚洲国产精品欧美一二99 | 亚洲午夜电影网| 欧美日韩一区二区三区在线| 午夜影院久久久| 日韩一区二区在线看| 国产美女久久久久| 国产精品久线在线观看| 91国模大尺度私拍在线视频| 国产精品亚洲一区二区三区妖精| 日韩精品在线一区| 国产精品自拍三区| 日韩伦理免费电影| 婷婷中文字幕一区三区| 亚洲影院久久精品| 欧美电影一区二区| 国产一区二区h| 日韩伦理av电影| 欧美手机在线视频| 精品伊人久久久久7777人| 亚洲国产成人一区二区三区| 99久久精品免费看国产免费软件| 亚洲一区二区三区中文字幕在线| 欧美欧美欧美欧美| 国产很黄免费观看久久| 亚洲视频一区二区在线| 91精品在线免费观看| 国产999精品久久| 亚洲成人中文在线| 国产喂奶挤奶一区二区三区| 日本韩国欧美在线| 国产一区二区三区av电影| 一区二区三区毛片| 久久久久国产精品麻豆ai换脸| 日本精品裸体写真集在线观看| 热久久免费视频| 亚洲色图一区二区| 2022国产精品视频| 欧美日韩精品专区| 99久久亚洲一区二区三区青草| 亚洲v精品v日韩v欧美v专区| 久久国产精品99精品国产| 日本一区二区三区久久久久久久久不 | 日韩欧美中文一区| 色综合久久中文字幕综合网 | 一区二区三区小说| 国产亚洲精品资源在线26u| 欧美亚洲动漫精品| 91蜜桃传媒精品久久久一区二区| 青椒成人免费视频| 亚洲福利视频三区| 亚洲欧美日韩中文播放 | 成人永久aaa| 精品一区二区在线观看| 亚洲五码中文字幕| 亚洲欧美国产毛片在线| 久久久欧美精品sm网站| 91精品国产91久久久久久一区二区| 99精品视频一区二区三区| 国产中文字幕一区| 蜜乳av一区二区三区| 午夜视频一区二区| 亚洲高清一区二区三区| 亚洲精品综合在线| 亚洲三级电影全部在线观看高清| 久久久久成人黄色影片| 久久综合色播五月| 日韩精品中午字幕| 欧美va在线播放| 精品国产人成亚洲区| 日韩三级视频中文字幕| 欧美酷刑日本凌虐凌虐| 欧美二区在线观看| 91精品国产欧美一区二区成人| 欧美日韩久久不卡| 欧美一区二区三区免费| 3atv一区二区三区| 欧美成人bangbros| 久久久亚洲国产美女国产盗摄 | 精品一区二区影视| 国模冰冰炮一区二区| 国产精品一级二级三级| 国产曰批免费观看久久久| 国产一区日韩二区欧美三区| 国内精品伊人久久久久av一坑| 久久精品国产99| 国产成人啪免费观看软件 | 日本一区二区视频在线观看| 欧美国产精品一区二区| 国产精品女同一区二区三区| 国产精品久久三| 亚洲精品国产第一综合99久久| 亚洲综合免费观看高清在线观看| 婷婷综合久久一区二区三区| 久久99久久精品| 成人永久aaa| 欧美日韩不卡一区| 欧美哺乳videos| 国产精品久久久久久久久久久免费看 | 奇米色777欧美一区二区| 另类小说欧美激情| 成人午夜伦理影院| 欧美午夜精品免费| 2023国产精品视频| 综合久久给合久久狠狠狠97色| 亚洲国产中文字幕在线视频综合| 热久久久久久久| 国产成人夜色高潮福利影视| 91美女在线看| 日韩三级视频在线看| 国产精品国产三级国产aⅴ无密码| 一区二区三区免费看视频| 久久97超碰色| 91蝌蚪国产九色| 欧美xingq一区二区| 亚洲视频精选在线| 国内精品免费在线观看| 欧美主播一区二区三区美女| 精品久久人人做人人爰| 亚洲精品欧美二区三区中文字幕| 蜜芽一区二区三区| 91亚洲精品一区二区乱码| 日韩亚洲欧美一区二区三区| 国产精品每日更新在线播放网址| 婷婷国产在线综合| jlzzjlzz国产精品久久| 日韩欧美成人一区| 亚洲在线视频一区| 成人黄色小视频在线观看| 91精品国产91久久久久久最新毛片 | 青草国产精品久久久久久| 91色在线porny| 久久久久国产精品麻豆ai换脸| 亚洲国产精品久久不卡毛片| 成人黄色网址在线观看| 精品欧美一区二区三区精品久久| 亚洲精品你懂的| 成人小视频免费观看| 日韩午夜激情视频| 亚洲国产精品人人做人人爽| 99久久国产免费看| 国产欧美一区二区精品性色超碰 | 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲一区二区三区四区五区中文 | 国产精品久久久久久久蜜臀| 韩国欧美国产1区| 日韩手机在线导航| 青娱乐精品在线视频| 欧美色综合天天久久综合精品| 综合欧美一区二区三区| 成人在线综合网站| 欧美激情一区二区三区蜜桃视频| 国产一区欧美二区| 日韩精品一区二区三区四区视频| 首页国产欧美日韩丝袜| 欧美图片一区二区三区| 亚洲最大色网站| 在线观看亚洲精品| 亚洲影院在线观看| 欧美日韩免费观看一区二区三区| 一区二区三区四区不卡视频| 91久久久免费一区二区|