⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hotpixel.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
字号:
/********************************************************************** * $Id: HotPixel.cpp 1820 2006-09-06 16:54:23Z mloskot $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/HotPixel.java rev. 1.2 (JTS-1.7) * **********************************************************************/#include <geos/noding/snapround/HotPixel.h>#include <geos/algorithm/LineIntersector.h>#include <geos/geom/Coordinate.h>#ifndef GEOS_INLINE# include "geos/noding/snapround/HotPixel.inl"#endif#include <cassert>#include <memory>using namespace std;using namespace geos::algorithm;using namespace geos::geom;namespace geos {namespace noding { // geos.nodingnamespace snapround { // geos.noding.snaproundHotPixel::HotPixel(const Coordinate& newPt, double newScaleFactor,		LineIntersector& newLi)	:	li(newLi),	pt(newPt),	originalPt(pt),	scaleFactor(newScaleFactor){	if (scaleFactor != 1.0) {		pt.x=scale(pt.x);		pt.y=scale(pt.y);	}	initCorners(pt);}const Envelope&HotPixel::getSafeEnvelope() const{	if (safeEnv.get() == NULL) {		double safeTolerance = .75 / scaleFactor;		safeEnv = auto_ptr<Envelope>(new Envelope(originalPt.x - safeTolerance,			originalPt.x + safeTolerance,			originalPt.y - safeTolerance,			originalPt.y + safeTolerance			));	}	return *safeEnv;}/*private*/voidHotPixel::initCorners(const Coordinate& pt) {	double tolerance = 0.5;	minx = pt.x - tolerance;	maxx = pt.x + tolerance;	miny = pt.y - tolerance;	maxy = pt.y + tolerance;	corner.assign(4, Coordinate(minx, maxy));}boolHotPixel::intersects(const Coordinate& p0,		const Coordinate& p1) const{	if (scaleFactor == 1.0) return intersectsScaled(p0, p1);	Coordinate p0Scaled;	Coordinate p1Scaled;	copyScaled(p0, p0Scaled);	copyScaled(p1, p1Scaled);	return intersectsScaled(p0Scaled, p1Scaled);}boolHotPixel::intersectsScaled(const Coordinate& p0,		const Coordinate& p1) const{#define MIN(x,y) (x)<(y)?(x):(y)	double segMinx = MIN(p0.x, p1.x);	double segMaxx = MIN(p0.x, p1.x);	double segMiny = MIN(p0.y, p1.y);	double segMaxy = MIN(p0.y, p1.y);	bool isOutsidePixelEnv =  maxx < segMinx                         || minx > segMaxx                         || maxy < segMiny                         || miny > segMaxy;	if (isOutsidePixelEnv) return false;	bool intersects = intersectsToleranceSquare(p0, p1);	// Found bad envelope test	assert(!(isOutsidePixelEnv && intersects));	return intersects;}/*private*/boolHotPixel::intersectsToleranceSquare(const Coordinate& p0,		const Coordinate& p1) const{    bool intersectsLeft = false;    bool intersectsBottom = false;    li.computeIntersection(p0, p1, corner[0], corner[1]);    if (li.isProper()) return true;    li.computeIntersection(p0, p1, corner[1], corner[2]);    if (li.isProper()) return true;    if (li.hasIntersection()) intersectsLeft = true;    li.computeIntersection(p0, p1, corner[2], corner[3]);    if (li.isProper()) return true;    if (li.hasIntersection()) intersectsBottom = true;    li.computeIntersection(p0, p1, corner[3], corner[0]);    if (li.isProper()) return true;    if (intersectsLeft && intersectsBottom) return true;    if (p0.equals2D(pt)) return true;    if (p1.equals2D(pt)) return true;    return false;}/*private*/boolHotPixel::intersectsPixelClosure(const Coordinate& p0,		const Coordinate& p1){    li.computeIntersection(p0, p1, corner[0], corner[1]);    if (li.hasIntersection()) return true;    li.computeIntersection(p0, p1, corner[1], corner[2]);    if (li.hasIntersection()) return true;    li.computeIntersection(p0, p1, corner[2], corner[3]);    if (li.hasIntersection()) return true;    li.computeIntersection(p0, p1, corner[3], corner[0]);    if (li.hasIntersection()) return true;    return false;}} // namespace geos.noding.snapround} // namespace geos.noding} // namespace geos/********************************************************************** * $Log$ * Revision 1.8  2006/05/03 17:51:24  strk * system headers included after package headers * * Revision 1.7  2006/03/24 09:52:41  strk * USE_INLINE => GEOS_INLINE * * Revision 1.6  2006/03/14 12:55:56  strk * Headers split: geomgraphindex.h, nodingSnapround.h * * Revision 1.5  2006/03/03 10:46:21  strk * Removed 'using namespace' from headers, added missing headers in .cpp files, removed useless includes in headers (bug#46) * * Revision 1.4  2006/02/21 16:53:49  strk * MCIndexPointSnapper, MCIndexSnapRounder * * Revision 1.3  2006/02/19 19:46:49  strk * Packages <-> namespaces mapping for most GEOS internal code (uncomplete, but working). Dir-level libs for index/ subdirs. * * Revision 1.2  2006/02/18 21:08:09  strk * - new CoordinateSequence::applyCoordinateFilter method (slow but useful) * - SegmentString::getCoordinates() doesn't return a clone anymore. * - SegmentString::getCoordinatesRO() obsoleted. * - SegmentString constructor does not promises constness of passed *   CoordinateSequence anymore. * - NEW ScaledNoder class * - Stubs for MCIndexPointSnapper and  MCIndexSnapRounder * - Simplified internal interaces of OffsetCurveBuilder and OffsetCurveSetBuilder * * Revision 1.1  2006/02/14 13:28:26  strk * New SnapRounding code ported from JTS-1.7 (not complete yet). * Buffer op optimized by using new snaprounding code. * Leaks fixed in XMLTester. * **********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -