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

📄 linetracer.java

📁 Please read your package and describe it at least 40 bytes. System will automatically delete the di
💻 JAVA
字号:
// A recogniser module for Dexter: Trace a line and set a number of// points on it.  A naive approach//// Copyright (c) 2000 Markus Demleitner <mdemleitner@head-cfa.harvard.edu>//  This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//// tabsize=2import java.awt.*;class LineTracer extends Recogniser{	Point startPoint;	int yThresh=3;	//drop points when more than yThresh below or above max/min	int pointSpacing;	public LineTracer(ImageWithPoints parent, RecogniserSettings settings)	{		super(parent,settings);		pointSpacing = settings.getIntProp("LineTracerSpacing");		if (pointSpacing<0 || (pointSpacing>1 && pointSpacing<5))		{	System.out.println("Invalid point Spacing -- resetting to 0");			pointSpacing = 0;		}	}	public boolean followLine(int dx, boolean drawFirst) throws Exception	{			Point curpoint=new Point(startPoint);		Point lastmax=null, lastmin=null;		int targy=curpoint.y;		int lastXDrawn;		int lastdY=0, dY, lastY=curpoint.y;		lastXDrawn = curpoint.x;		if (!debug && drawFirst) {			parent.addPoint(curpoint);		}		while (nextY(curpoint, targy, dx)) {				if (debug) {					System.out.println("----"+curpoint.x+" "+curpoint.y+" "+lastdY+" "+					(lastY-curpoint.y)+" la"+lastmax+" li"+lastmin);			}			if (stopMe)				throw new Exception("Ignore");						// drop a point if the function does something exciting or if I feel			// it's too long since the last one			dY = lastY-curpoint.y;			if (!debug && ((Math.abs(lastXDrawn-curpoint.x)>pointSpacing) || 				(lastdY!=0 && Math.abs(lastdY-dY)>3))) {					parent.addPoint(curpoint);				lastXDrawn = curpoint.x;			}			else {				if (debug)					System.out.println("s"+curpoint);			}			if (lastmax!=null && lastmax.y-curpoint.y>yThresh) {					parent.addPoint(lastmax);				lastmax = null;				if (debug)					System.out.println("s"+lastmax);			}			if (lastmin!=null && curpoint.y-lastmin.y>yThresh) {					parent.addPoint(lastmin);				lastmin = null;				if (debug) {					System.out.println("s"+lastmax);				}			}			if (lastdY*dY<=0)			{	if (lastdY>0)	// a minimum (->maximum on paper)				{	if (lastmin==null)						lastmin = new Point(curpoint);					else						if (lastmin.y>curpoint.y)							lastmin = new Point(curpoint);				}				if (lastdY<0)	// a maximum				{	if (lastmax==null)						lastmax = new Point(curpoint);					else						if (lastmax.y<curpoint.y)							lastmax = new Point(curpoint);				}			}			lastdY = dY;			lastY = curpoint.y;			targy = lastY-dY*dx;			curpoint.x += dx;			if (curpoint.x<=axisLeft||curpoint.x>=axisRight||curpoint.y<axisTop||				curpoint.y>axisBottom)				break;		}		if (!debug)			parent.addPoint(new Point(curpoint.x-dx,lastY));		return true;	}	public synchronized boolean putCoordinate(Point p)	{			startPoint = p;		this.notify();		return false;	}	// home in on a good starting point	protected boolean analyseIt()	{	int ind=startPoint.x+startPoint.y*px_w;		yThresh = px_h/50+1;		if (pixels[ind]>blackThresh)		{	int stopat=Math.min(ind+20,px_max);			for (;ind<stopat;ind++)				if (pixels[ind]<=blackThresh)					break;						if (pixels[ind]>blackThresh)			{	ind=startPoint.x+startPoint.y*px_w;				stopat = Math.max(0,ind-20);				for (;ind>stopat;ind--)					if (pixels[ind]<=blackThresh)						break;			}			if (pixels[ind]>blackThresh)			{	ind=startPoint.x+startPoint.y*px_w;				stopat = Math.max(0,ind-20*px_w);				for (;ind>stopat;ind-=px_w)					if (pixels[ind]<=blackThresh)						break;			}								if (pixels[ind]>blackThresh)			{	ind=startPoint.x+startPoint.y*px_w;				stopat = Math.min(px_max,ind+20*px_w);				for (;ind<stopat;ind+=px_w)					if (pixels[ind]<=blackThresh)						break;			}			if (pixels[ind]>blackThresh)				return false;			startPoint.x = ind%px_w;			startPoint.y = ind/px_w;		}			// XXX Need a better idea here		if (pointSpacing==0)			pointSpacing = px_w/20;		return true;	}	protected void recogniseIt() throws Exception	{	followLine(-1,true);		followLine(+1,false);	}}

⌨️ 快捷键说明

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