| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:帮我看这程序(已加程序说明)
取消只看楼主 加入收藏
xuweiwei417
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-9-15
收藏
 问题点数:0 回复次数:0 
帮我看这程序(已加程序说明)

后面那部分for 循环出来的结果不对
如果把两部分分开单独编,能出正确的数据
是不是内存的问题啊
算法为用两种方法加工椭圆面时的加工步数和求步数差
前面一种为保持X轴方向的步距相等.后一种为两次圆弧插补加工后的包络迹高度相等


public class Stepscha{
public static void main(String[] args){
double a,b,R,l,x0,y0,xx0,yy0,xc,h,x1,k1,k2,a1,b1,d,mid,n=0.1;/*a,b为椭圆轴,x0,y0为砂轮磨削工件的起点,x00,y00为砂轮圆心位置,h为包络迹高度,k1,k2分别为椭圆的切线和法线*/
double xx[]=new double[100000]; //砂轮圆心X轴的坐标
double yy[]=new double[100000]; //砂轮圆心Y轴坐标
int xsteps[]=new int[100000]; //用X轴方向步距不变的加工步数
int hsteps[]=new int[100000]; //用等包络迹高度方法加工的加工步数
float max1[]=new float[100000];
float max;
double hh[]=new double[100000];
int i,m=1,j=1,k=1,e=0,t;
a=170;b=68;l=100.0;R=87.0748; //R为砂轮半径
a1=a+R; //砂轮圆心的椭圆轨迹轴
b1=b+R;
x0=-l/2;//L为工件长度,对X0给初值
y0=Math.sqrt((1-x0*x0/(a*a))*b*b); //根据椭圆方程求y0
k1=-b*b*x0/(a*a*y0);             // 椭圆切线
k2=-1/k1; //椭圆法线
xx0=x0-R/Math.sqrt(1+k2*k2);//求初始位置的砂轮圆心位置
mid=xx0;
yy0=Math.sqrt((1-xx0*xx0/(a1*a1))*b1*b1);
for(xc=10;xc>=0.01;xc=xc-0.001){             //当步距为xc时
for(xx0=mid;xx0<=-mid;xx0=xx0+xc){
yy0=Math.sqrt((1-xx0*xx0/(a1*a1))*b1*b1);
xx[m]=xx0;//把砂轮坐标放到数组里
yy[m]=yy0;
m++;
}
for(i=2;i<m;i++){
d=Math.sqrt((xx[i]-xx[i-1])*(xx[i]-xx[i-1])+(yy[i]-yy[i-1])*(yy[i]-yy[i-1]));
h=R-Math.sqrt(R*R-d*d/4);             //求xc时的包络迹高度
if(h>max)
max=(float)h;                   //把步距为xc时的最大包络迹高度辅给max

}
while(max>=0.00001){
if((max-n)<=0.000001){ /*把max与给定的n比较,满足条件是,把max,和步数存到数组*/
xsteps[e]=m-1;
max1[e]=max;
e++;
n=n-0.00001;
}
break;   //跳出循环
}
m=1;max=0;          //m和max恢复初值,重复循环
}
t=e;               //把数组长度存到t
x0=-l/2;
e=0;

for(j=0;j<t;j++){         /*采用等包络高度加工时步数的算法,h用上面数组max1里的值代替(问题好象就出在这*/   
while (x0<=l/2) {
d=2*Math.sqrt(R*R-(R-(float)max1[j])*(R-(float)max1[j]));
y0= Math.sqrt((1-x0*x0/(a*a))*b*b);
k1=-b*b*x0/(a*a*y0);
k2=-1/k1;
x1=x0+d/Math.sqrt(1+k1*k1);
x0=x1;
m++;
}
hsteps[e]=m+1;
e++;
x0=-l/2;
}
m=e-1;
System.out.println("h xsteps hsteps xsteps-hsteps");
for(e=0;e<=t;e++){
j=xsteps[e]-hsteps[e];
System.out.println(max1[e]+" "+xsteps[e]+" "+hsteps[e]+" "+j);

}
}
}

搜索更多相关主题的帖子: 起点 
2005-11-27 12:48
快速回复:帮我看这程序(已加程序说明)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032910 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved