当前位置:首页 » 编程语言 » 第一象限直线插补c语言程序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

第一象限直线插补c语言程序

发布时间: 2022-11-18 20:30:46

A. c语言直线插补程序,高手请进采纳后追加20分

程序问题是自己检查的,没有人会跟你看程序。
你只要说明方法或者是流程图。
你做的是直线逐点比较。
先砍掉插补程序,看能否画划线,在添加第一象限插补,最后全加上去。
确保每个步骤添加进去的代码没有问题。

B. 过来帮帮忙啊,我就这么多分了,都给!

LP:MOV SP,#60H 定义堆栈指针

MOV 4AH,#00H 偏差单元清零

MOV 49H,#00H

MOV 48H,#01H 初始化XY电动机

MOV 47H,#02H

MOV A,4EH 计算终点判别,Xe+Ye之低位

ADD A,4CH

MOV 50H,A

MOV A,4DH Xe+Ye之高位

ADDC A,4BH 低位相加,可能产生进位

MOV 4FH,A

MOV A,#03H XY电动机上电

MOV DPTR,#0030H

MOVX @DPTR,A

LP2:ACALL DL0 延时子程序

MOV A,49H 取偏差F的高8位

JB ACC.7,LP4 偏差F< 0,去LP4

ACALL XMP F>=0,调X电动机正转子程序

CLR C 计算新偏差F值,F=F-Ye

MOV A,4AH

SUBB A,4CH 可向高位字节借位

MOV 4AH,A

MOV A,49H

SUBB A,4BH

MOV 49H,A

LP3:CLR C 终判值减1

MOV A,50H

SUBB A,#01H 可向高位字节借位

MOV 50H,A

MOV A,4FH

SUBB A,#00H 考虑低位字节借位

MOV 4FH,A 终判值判零

ORL A,50H

JNZ LP2 终判值不为零,去LP2,否则插补结束

LJMP 0000H

LP4:ACALL YMP 调Y电动机正转子程序

MOV A,4AH 计算新偏差F值,F=F+Xe

ADD A,4EH

MOV 4AH,A

MOV A,49H

ADDC A,4DH

MOV 49H,A

SJMP LP3

XMP: MOV A,48H 取X电动机当前状态字

CLR C 移位法

RRC A

RRC A

RRC A

XMP2:CPL A

ANL A,#49H 屏蔽无关位

MOV 48H,A 保存X电动机状态字,作为下次转动的基准

ORL A,47H 保存Y电动机原状态不变

XMP4:MOV DPTR,#0030H

MOVX @DPTR,A

RET

XMM:MOV A,48H

CLR

RLC A

RLC A

RLC A

SJMP XMP2

YMP:MOV A,47H

CLR C

RRC A

RRC A

RRC A

YMP2:CPL A

ANL A,#92H

MOV 47H,A

ORL A,48H

SJMP XMP4

YMM:MOV A,47H

CLR C

RLC A

RLC A

RLC A

SJMP YMP2

C. 用C语言编一个线性插值的小程序,很着急

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct data
{
float x;
float y;
}Data;//变量x和函数值y的结构
Data d[20];//最多二十组数据
float f(int s,int t)//牛顿插值法,用以返回插商
{
if(t==s+1)
return (d[t].y-d[s].y)/(d[t].x-d[s].x);
else
return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);
}
float Newton(float x,int count)
{
int n;
while(1)
{
cout<<"请输入n值(即n次插值):";//获得插值次数
cin>>n;
if(n<=count-1)// 插值次数不得大于count-1次
break;
else
system("cls");
}
//初始化t,y,yt。
float t=1.0;
float y=d[0].y;
float yt=0.0;
//计算y值
for(int j=1;j<=n;j++)
{
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
//cout<<f(0,j)<<endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=0.0;
for(int k=0;k<count;k++)//这儿默认为count-1次插值
{
float p=1.0;//初始化p
for(int j=0;j<count;j++)
{//计算p的值
if(k==j)continue;//判断是否为同一个数
p=p*(x-d[j].x)/(d[k].x-d[j].x);
}
y=y+p*d[k].y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数
cin>>count;
if(count<=20)
break;//检查输入的是否合法
system("cls");
}
//获得各组数据
for(int i=0;i<count;i++)
{
cout<<"请输入第"<<i+1<<"组x的值:";
cin>>d[i].x;
cout<<"请输入第"<<i+1<<"组y的值:";
cin>>d[i].y;
system("cls");
}
cout<<"请输入x的值:";//获得变量x的值
cin>>x;
while(1)
{
int choice=3;
cout<<"请您选择使用哪种插值法计算:"<<endl;
cout<<" (0):退出"<<endl;
cout<<" (1):Lagrange"<<endl;
cout<<" (2):Newton"<<endl;
cout<<"输入你的选择:";
cin>>choice;//取得用户的选择项
if(choice==2)
{
cout<<"你选择了牛顿插值计算方法,其结果为:";
y=Newton(x,count);break;//调用相应的处理函数
}
if(choice==1)
{
cout<<"你选择了拉格朗日插值计算方法,其结果为:";
y=lagrange(x,count);break;//调用相应的处理函数
}
if(choice==0)
break;
system("cls");
cout<<"输入错误!!!!"<<endl;
}
cout<<x<<" , "<<y<<endl;//输出最终结果

}

D. 设第一象限的直线AB,起点坐标为A(1,1),终点坐标为B(5,6),请用DDA直线插补法对其进行

设第一象限的直线AB,起点坐标为A(1,1),终点坐标为B(5,6),

线段AB的解析式为:
(y-1)/(6-1)=(x-1)/(5-1),
4(y-1)=5(x-1),
y=(5/4)x-(1/4). 1≤x≤5.

E. 插补算法仿真程序设计,c语言程序设计,求大神指点

本周该交了,加油,哈哈

F. 预加工第一象限直线OE,其中点坐标为Xe=5,ye=7,起点在原点.试用逐点比较法进行插补,并画出进给轨迹图

当fi,j<0时,向+y方向进给一个脉冲当量,到达点pi,j+1,此时yj+1=yj+1,则点pi,j+1的偏差判别函数fi,可见,新加工点的偏差fi+1,j或fi,j+1是由前一个加工点的偏差fi,j和终点的坐标值递推出来的,如果按前两式计算偏差,则计算大为简化。

终点判别三种方法:

(1)判别插补或进给的总步数:n=xe+ye;

(2)分别判别各坐标轴的进给步数;

(3)仅判断进给步数较多的坐标轴的进给步数。

总结:

第一拍判别 第二拍判别 第三拍判别 第四拍比较

ij≥0 +δx fi+1,j= fi,j-ye ei+j=e终-1

fij<0 +δy fi,j+1= fi,j+xe

(6)第一象限直线插补c语言程序扩展阅读:

根据判别中的组数,可以分为两组判别分析和多组判别分析;

根据判别函数的形式,可以分为线性判别和非线性判别;

根据判别式处理变量的方法不同,可以分为逐步判别、序贯判别等;

根据判别标准不同,可以分为距离判别、Fisher判别、Bayes判别法等。

G. 谁有用C语言编写的直线,圆弧插补程序

/*************************************************************************
Function:intArcXY(doubledfx0,doubledfy0,doubledfrx,
doubledfry,intangle);
Description:在X-Y轴所构成的平面上,以圆弧运动的方式从目前位置经过指
定的参考点到目的点。调用此函数成功将增加运动命令的库存数目。
Parameters:dfx0,dfy0参考点的X-Y轴座标值
dfrx,dfry圆心的X-Y轴座标值
angle插补角度
Calls:无
ReturnValue:大于或等于0给予此运动命令的编码
小于0失败,传回值的意义可参考错误信息代码
**************************************************************************/

#include<stdio.h>
#include<math.h>
intArcXY(doubledfx0,doubledfy0,doubledfrx,doubledfry,intangle);
intsymbol(doublenumber);

main()
{

ArcXY(0,0,-3,5,360);
getch();

}
intArcXY(doubledfx0,doubledfy0,doubledfrx,doubledfry,intangle)
{
FILE*f1;

doublei,j,dx,dy,dfr,x,y,ang,step,f=0.01;

intflag,tempx,tempy,statex,statey,direction=1;

dfr=sqrt((dfrx-dfx0)*(dfrx-dfx0)+(dfry-dfy0)*(dfry-dfy0));

if(dfx0==0)
{
dfx0=1;
dfrx=dfrx+1;
statex=1;
}
if(dfy0==0)
{
dfy0=1;
dfry=dfry+1;
statey=1;
}

dfrx=2*dfx0-dfrx;

i=dfx0-dfrx;
j=dfy0-dfry;

x=dfx0;
y=dfy0;

step=ang=180*2*asin(f/(2*dfr))/3.1415926;

if(((dfx0>0)&&(dfy0>0))||((dfx0<0)&&(dfy0<0)))
{
flag=direction;
}

if(((dfx0<0)&&(dfy0>0))||((dfx0>0)&&(dfy0<0)))
{
flag=-direction;
}

f1=fopen("c:\c.txt","w+");

if(statex==1)
{
x=x-1;
}
if(statey==1)
{
y=y-1;
}

fprintf(f1,"%f,",x);
fprintf(f1,"%f ",y);

while(ang<angle)
{
dx=f*(j+flag*(f*i)/(2*dfr))/dfr;
dy=f*(i-flag*(f*j)/(2*dfr))/dfr;
tempx=symbol(x);
tempy=symbol(y);

x=x+dx;
y=y+dy;

fprintf(f1,"%f,",x);
fprintf(f1,"%f ",y);

if((tempx!=symbol(x))||(tempy!=symbol(y)))
{
flag=-flag;
}

i=i-dx;
j=j+dy;
ang=ang+step;

}

return0;

}

intsymbol(doublenumber)
{
if(number>0)
{
return1;
}
else
{
return-1;
}
}

H. 找计算机控制的高手,做点题目。救急!!万谢!!

呵呵,开玩笑吧!~~~这么多题
轨迹图原理图画完怎么贴上来啊啊?(即使有活雷峰出现,你也得留个E-MAIL啊)
出问题之前多动动脑子!!!

I. 求51单片机可以用的直线插补的c程序

限于篇幅,程序省去 按键子程序 延时子程序 液晶初始化及相关程序、字符部分

#include<reg52.h>
#include<intrins.h>
#definemode0x81//方式0,A口、B口输出,C口高4位输出,低4位输入
#include"stdio.h"
#include"string.h"
#include"math.h"
xdataunsignedcharPA_at_0x7f00;
xdataunsignedcharPB_at_0x7f01;
xdataunsignedcharPC_at_0x7f02;
xdataunsignedcharcaas_at_0x7f03;//控制字
sbitP32=P3^2;
sbitP33=P3^3;
sbitP35=P3^5;
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharh,Pos;
unsignedintR,NX,NY;
unsignedcharkey;
codeunsignedcharKeyTable[]={//键码定义
0x0f,0x0b,0x07,0x03,
0x0e,0x0a,0x06,0x02,
0x0d,0x09,0x05,0x01,
0x0c,0x08,0x04,0x00
};
codeunsignedcharLEDMAP[]={//八段管显示码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
unsignedcharCode_;//字符代码寄存器
#definePD161//122/2分成左右两半屏(122x32)
unsignedcharColumn;
unsignedcharPage_;//页地址寄存器D1,DO:页地址
unsignedcharCode_;//字符代码寄存器
unsignedcharCommand;//指令寄存器
unsignedcharLCDData;//数据寄存器
xdataunsignedcharCWADD1_at_0x1cff;//写指令代码地址(E1)
xdataunsignedcharDWADD1_at_0x1eff;//写显示数据地址(E1)
xdataunsignedcharCRADD1_at_0x1dff;//读状态字地址(E1)
xdataunsignedcharDRADD1_at_0x1fff;//读显示数据地址(E1)
xdataunsignedcharCWADD2_at_0x3cff;//写指令代码地址(E2)
xdataunsignedcharDWADD2_at_0x3eff;//写显示数进地址(E2)
xdataunsignedcharCRADD2_at_0x3dff;//读状态字地址(E2)
xdataunsignedcharDRADD2_at_0x3fff;//读显示数据地址(E2)
//----------------------液晶-----------------
//清屏
//************************中文显示程序***********************************/
/*************************直线插补***************************8*/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
voidzhengx()
{
PA=0x00;
delay(10);
PA=0x01;
delay(10);
}
voidfux()
{
PA=0x02;
delay(10);
PA=0x03;
delay(10);
}
voidzhengy()
{
PB=0x00;
delay(10);
PB=0x10;
delay(10);
}
voidfuy()
{
PB=0x20;
delay(10);
PB=0x30;
delay(10);
}
voidxian(intNX,intNY)
{intFM,NXY,XOY,ZF,z;
FM=0;
{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}
for(NXY=fabs(NX)+fabs(NY)-1;NXY>=0&&P32!=0&&P33!=0;NXY--)
{{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}
for(NXY=fabs(NX)+fabs(NY)-1;NXY>=0;NXY--)
{if(FM>=0)
{if(XOY==1||XOY==4)
{ZF=1;
zhengx();
}
else
{ZF=2;
fux();
}
FM=FM-fabs(NY);
}
else
{if(XOY==1||XOY==2)
{
ZF=3;
zhengy();
}
else
{ZF=4;
fuy();
}
FM=FM+fabs(NX);
}
}
for(z=0;z<200;z++)
{P35=0;
delay(10);
P35=1;
delay(10);
}
}
}