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);
}
}
}