算法中扫描
⑴ ZIGZAG扫描和行程编码算法和原理
zigzag扫描如上图,行程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。例如:5555557777733322221llllll
行程编码为:(5,6)(7,5)(3,3)(2,4)(l,7)。可见,行程编码的位数远远少于原始字符串的位数。
⑵ 计算机图形学:直线段扫描转换算法
//数值微分算法(DDA算法)
#include<iostream>
using namespace std;
int main()
{
float x0,y0,x1,y1,x2,y2;
cin>>x1>>y1;
cin>>x0>>y0;
float k;
k=(y1-y0)/(x1-x0);
if(k<1)
{
x2=x1+1;
y2=y2+k;
}
else if(k>=1)
{
y2=y1+1;
x2=1/k+x1;
}
cout<<x2<<" "<<y2<<endl;
return 0;
}
//中点划线算法
#include<iostream>
using namespace std;
int main()
{ float x,y;
float x0,y0,x1,y1;
cin>>x0>>y0>>x1>>y1;
float a,b,c;
a=y0-y1;
b=x1-x0;
c=x0*y1-x1*y0;
float sum;
sum=a*x+b*y+c;
float Xq,Yq;
float Xm,Ym;
Xm=x0+1;
Ym=y0+0.5;
float d;
d=a*Xm+b*Ym+c;
if(d<0)
{Xq=x0+1; Yq=y0+1; }
else if(d>0)
{ Xq=x0+1; Yq=y0; }
else if(d=0)
{ Xq=x0+1; Yq=y0; }
cout<<Xq<<" "<<Yq<<endl;return 0;
}
//Bresenham算法//有一个整数数组,请求出两两之差绝对值最大的值(最小的值)
#include<iostream>
using namespace std;
int jisuan(int a,int b)
{ int des=0; des=a-b; if(des<0)
des=-des;
return des;}
int main()
{ int dec=0; int max=0; int a[5]={0,2,5,9,4}; for(int i=1;i<5;i++)
{ dec=jisuan(a[i],a[i-1]); if(max<dec) max=dec; }
cout<<max<<endl;
return 0;
}
不好意思,最后一个是我写的另一个代码,贴错了
⑶ 扫描算法增加方向和减少方向算出来的值一样吗.
一样
要实现区域的扫描线填充必须先确定填充区边界与屏幕扫描线的交点位置。然后,将填充色应用于扫描线上位于填充区域内部的每一段。扫描线填充算法利用奇偶规则识别同一内部区域(参见)。最简单的填充区域是多边形,因为每一扫描线和多边形的交点可通过求解一对联立的线性方程来获得,其中扫描线的方程是y = 常数。
给出了多边形区域的实心填充的扫描线过程。对每一条与多边形相交的扫描线,与边的交点从左向右排序,且将每一对交点之间的像素位置包括这对交点在内,设定为指定颜色。在图4.20的例子中,与边界的四个交点像素位置定义了两组内部像素。这样,填充色应用于从x=10到x = 14的5个像素和从x = 18到x = 24的7个像素。如果图案填充应用于多边形,则沿一条扫描线的每一像素颜色由与填充图案重叠的位置来确定。
⑷ C语言 水平扫描算法
我只能给一点建议:
如果你要一条线连贯,首先要将其变粗,比如用2个像素作为线段宽度.
之后,得出最底端中点
接下来,计算高一行中点位置,如果偏出太多,比如偏太左,那么就在其低一行中点的左上方紧挨着定中点.
线段越粗,越能表示偏角.
只是一点建议 不够专业.
⑸ 如何校验和是通过一定的算法扫描一个数据计算出的一个数值。用C语言
#include<stdio.h>
intQuicksum(char*str)//用指针做校验函数的参数,来接收被校验的字符串A;
{
intsum=0,loc=1,i,n;//sum代表校验和,loc代表每个字符在字符串A里的位置;
char*p;
p=str;//将被校验字符串A的地址赋值给字符指针p,用p表示位置;
n=strlen(p);//用strlen函数求出A的有效长度;
for(i=0;i<n;i++)//注意循环的次数。体会i<n的意思,保证能计算到每个字符
{
if((*p)==''){p++;loc++;continue;}//如果遇到空格,就将位置指针向后移动一个,跳过空格
//注意loc也要增加一,为了正确记录每个字符的位置
sum+=((*p-'A')+1)*loc;//如果此处不是空格,就根据校验计算该位置所代表的和,进行累加
loc++;//将位置指针移动到下一个字符,同时loc也跟着变化
p++;
}
returnsum;//返回校验和
}
voidmain()
{
intjiaoyanhe;
char*string;
printf("Pleaseinput(A-Z):");
gets(string);//使用gets函数输入字符串;
jiaoyanhe=Quicksum(string);//调用Quicksum函数进行校验和的计算。
printf("jiaoyanhe:");
printf("%d ",jiaoyanhe);
}
上机运行的时候,把注释全删了吧,要不然可能运行出错,多体会一下吧,这只是其中的一种方法而已,多上机运行代码,理解下里面的逻辑,好运。
⑹ 设计算法判断一个算术表达式的园括号是否正确配对,对表达式扫描
#include"stdio.h"
voidBracketMatch(char*str)/*str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配*/
{
SeqStackS;
inti;
charch;
InitStack(&S);
for(i=0;str[i]!='