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

📄 output.c

📁 Image Processing, Analysis, and Machine Vision 3rd Edition (2007)
💻 C
字号:
##include "defs.h"#include <stdio.h>/* for those who don't have Cherry's plot *//* #include <plot.h> */openpl(){}line(){}circle(){}range(){}float pxmin, pxmax, pymin, pymax, cradius;out_bisector(e)struct Edge *e;{if(triangulate & plot &!debug)	line(e->reg[0]->coord.x, e->reg[0]->coord.y, 	     e->reg[1]->coord.x, e->reg[1]->coord.y);if(!triangulate & !plot &!debug)	printf("l %f %f %f", e->a, e->b, e->c);if(debug)	printf("line(%d) %gx+%gy=%g, bisecting %d %d\n", e->edgenbr,	    e->a, e->b, e->c, e->reg[le]->sitenbr, e->reg[re]->sitenbr);}out_ep(e)struct Edge *e;{if(!triangulate & plot) 	clip_line(e);if(!triangulate & !plot){	printf("e %d", e->edgenbr);	printf(" %d ", e->ep[le] != (struct Site *)NULL ? e->ep[le]->sitenbr : -1);	printf("%d\n", e->ep[re] != (struct Site *)NULL ? e->ep[re]->sitenbr : -1);};}out_vertex(v)struct Site *v;{if(!triangulate & !plot &!debug)	printf ("v %f %f\n", v->coord.x, v->coord.y);if(debug)	printf("vertex(%d) at %f %f\n", v->sitenbr, v->coord.x, v->coord.y);}out_site(s)struct Site *s;{if(!triangulate & plot & !debug)	circle (s->coord.x, s->coord.y, cradius);if(!triangulate & !plot & !debug)	printf("s %f %f\n", s->coord.x, s->coord.y);if(debug)	printf("site (%d) at %f %f\n", s->sitenbr, s->coord.x, s->coord.y);}out_triple(s1, s2, s3)struct Site *s1, *s2, *s3;{if(triangulate & !plot &!debug)	printf("%d %d %d\n", s1->sitenbr, s2->sitenbr, s3->sitenbr);if(debug)	printf("circle through left=%d right=%d bottom=%d\n", 		s1->sitenbr, s2->sitenbr, s3->sitenbr);}plotinit(){float dx,dy,d;dy = ymax - ymin;dx = xmax - xmin;d = ( dx > dy ? dx : dy) * 1.1;pxmin = xmin - (d-dx)/2.0;pxmax = xmax + (d-dx)/2.0;pymin = ymin - (d-dy)/2.0;pymax = ymax + (d-dy)/2.0;cradius = (pxmax - pxmin)/350.0;openpl();range(pxmin, pymin, pxmax, pymax);}int clip_line(e)struct Edge *e;{struct Site *s1, *s2;float x1,x2,y1,y2;	if(e -> a == 1.0 && e ->b >= 0.0)	{	s1 = e -> ep[1];		s2 = e -> ep[0];	}	else 	{	s1 = e -> ep[0];		s2 = e -> ep[1];	};	if(e -> a == 1.0)	{		y1 = pymin;		if (s1!=(struct Site *)NULL && s1->coord.y > pymin)			 y1 = s1->coord.y;		if(y1>pymax) return;		x1 = e -> c - e -> b * y1;		y2 = pymax;		if (s2!=(struct Site *)NULL && s2->coord.y < pymax) 			y2 = s2->coord.y;		if(y2<pymin) return(0);		x2 = e -> c - e -> b * y2;		if ((x1> pxmax & x2>pxmax) | (x1<pxmin&x2<pxmin)) return;		if(x1> pxmax)		{	x1 = pxmax; y1 = (e -> c - x1)/e -> b;};		if(x1<pxmin)		{	x1 = pxmin; y1 = (e -> c - x1)/e -> b;};		if(x2>pxmax)		{	x2 = pxmax; y2 = (e -> c - x2)/e -> b;};		if(x2<pxmin)		{	x2 = pxmin; y2 = (e -> c - x2)/e -> b;};	}	else	{		x1 = pxmin;		if (s1!=(struct Site *)NULL && s1->coord.x > pxmin) 			x1 = s1->coord.x;		if(x1>pxmax) return(0);		y1 = e -> c - e -> a * x1;		x2 = pxmax;		if (s2!=(struct Site *)NULL && s2->coord.x < pxmax) 			x2 = s2->coord.x;		if(x2<pxmin) return(0);		y2 = e -> c - e -> a * x2;		if ((y1> pymax & y2>pymax) | (y1<pymin&y2<pymin)) return(0);		if(y1> pymax)		{	y1 = pymax; x1 = (e -> c - y1)/e -> a;};		if(y1<pymin)		{	y1 = pymin; x1 = (e -> c - y1)/e -> a;};		if(y2>pymax)		{	y2 = pymax; x2 = (e -> c - y2)/e -> a;};		if(y2<pymin)		{	y2 = pymin; x2 = (e -> c - y2)/e -> a;};	};		line(x1,y1,x2,y2);}

⌨️ 快捷键说明

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