home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS 1
/
BBS#1.iso
/
document
/
mn894.ha
/
KOROTK2.TXT
< prev
next >
Wrap
Text File
|
1994-10-19
|
3KB
|
116 lines
ǬΓπá½∞¡á∩ »α«í½Ñ¼á αáß»«º¡áóá¡¿∩ «íαẫó αÑΦáÑΓß∩ ß »«¼«Θ∞ε ÑÑ
ñѬ«¼»«º¿µ¿¿ ¡á ¡Ñ߬«½∞¬« í«½ÑÑ »α«ßΓδσ »«ñºáñáτ, «ñ¡á ¿º ¬«Γ«αδσ -
»α«óÑñÑ¡¿Ñ »áαá¼ÑΓα¿τÑ߬«ú« »αÑ«íαẫóá¡¿∩ òáΣá. Åα¿óÑñÑ¡δ »α¿¼Ñαδ
»α«úαá¼¼ ¡á æ.
ï¿ßΓ¿¡ú
#include <stdlib.h>
#include <math.h>
#include <alloc.h>
#include <stdio.h>
#define MAXLINES 5 /* îá¬ß¿¼á½∞¡«Ñ τ¿ß½« »α∩¼δσ */
/* ñ½∩ «ñ¡«ú« º¡áτÑ¡¿∩ πú½á */
void InitHough(float delt, int freshold);
void Hough(int x, int y, int dx, int dy);
void CloseHough(void);
int getch(void);
/* öπ¡¬µ¿∩ »«½∞º«óáΓѽ∩. éσ«ñ: ¬««αñ¿¡áΓδ Γ«τ¬¿ */
/* ¿º«íαáªÑ¡¿∩. éδσ«ñ: 1 ¿½¿ 0 - Γ«τ¬á »α¿¡áñ½Ñª¿Γ */
/* ¿º«íαáªÑ¡¿ε (τÑα¡á∩) ¿½¿ ¡ÑΓ (íѽá∩). */
extern int image(int x,int y);
float dt;
float far *Cos, far *Sin;
unsigned far *H;
int fresh;
/* delt - αẼÑα Φáúá »« πú½π, */
/* freshold - ¼¿¡¿¼á½∞¡«Ñ τ¿ß½« Γ«τѬ, »« ¬«Γ«α«¼π */
/* αÑú¿ßΓα¿απÑΓß∩ »α∩¼á∩ */
void InitHough(float delt, int freshold)
{
float t;
int i;
dt=delt;
fresh=freshold;
Cos=(float far *)
farmalloc(sizeof(float)*(int)((M_PI+dt/2)/dt));
Sin=(float far *)
farmalloc(sizeof(float)*(int)((M_PI+dt/2)/dt));
if(Cos==NULL || Sin==NULL) return;
for(t=0, i=0; i<(int)((M_PI+dt/2)/dt); t+=dt, i++)
{
Cos[i]=cos(t);
Sin[i]=sin(t);
}
}
void CloseHough(void)
{
farfree(Cos);
farfree(Sin);
}
void Hough(int x, int y, int dx, int dy)
{
int i,j,si,k,R,nt;
int **lines;
if(!(Cos && Sin)) return;
si=4*max(dx,dy)/3; /* ù¿ß½« ñ¿ß¬αÑΓ¡δσ φ½Ñ¼Ñ¡Γ«ó »« "α«" */
H=(unsigned far *)farmalloc(sizeof(int)*si);
if(H==NULL) return;
nt=(int)((M_PI+dt/2)/dt);
/* ù¿ß½« Φáú«ó »« πú½π */
lines=(int **)malloc(sizeof(int *)*nt);
if(lines==NULL) goto out;
for(i=0; i<nt; i++) lines[i]=NULL;
for(i=0; i<nt; i++)
{
lines[i]=(int *)malloc(sizeof(int)*MAXLINES);
if(lines[i]==NULL) goto out;
for(j=0; j<MAXLINES; j++) lines[i][j]=0;
}
for(k=0; k<nt; k++)
{
for(i=0; i<si; i++) H[i]=0;
for(i=0; i<dx; i++)
{
for(j=0; j<dy; j++)
{
if(image(x+i,y+j))
{
R=i*Cos[k]+j*Sin[k];
if(R>=0 && R < si)
H[R]++;
}
}
}
R=0;
for(i=0; i<si && R<MAXLINES; i++)
{
if(H[i] > fresh) lines[k][R++]=i+1;
/* çừ¼¿¡áѼ ¼á¬ß¿¼π¼δ "α«" ñ½∩ k-ú« πú½á */
}
}
for(i=0; i<nt ;i++)
{
for(j=0;j<MAXLINES;j++)
{
if(lines[i][j]!=0)
printf("\n»α∩¼á∩: πú«½=%f ñ¿ßΓá¡=%f",
(float)i*dt*180./3.1415926,(float)(lines[i][j]-1));
}
}
getch();
out:
for(i=0;i<nt;i++) if(lines[i]) free(lines[i]);
if(lines) free(lines);
if(H) farfree(H);
}