如何在flash中,用as3.0代码实现绘制反比例函数曲线 5
输入参数k,绘制y=k/x的函数曲线。主要是不知道graphics.moveTo()和graphics.lineTo()的起点和终点如何写?麻烦懂的大佬指点一下。你好,我...
输入参数k,绘制y=k/x的函数曲线。主要是不知道graphics.moveTo()和graphics.lineTo()的起点和终点如何写?麻烦懂的大佬指点一下。
你好,我的原点位置为(200,200),k3是输入的K值,这样绘制不出图象,麻烦看看问题出在哪里了? 展开
你好,我的原点位置为(200,200),k3是输入的K值,这样绘制不出图象,麻烦看看问题出在哪里了? 展开
2个回答
展开全部
graphics.moveTo(起点),这句相当于把绘制点移到某地,
以后的graphics.lineTo(终点),这里的终点就是下一个线段的起点。
要划这个曲线首先要知道自己划的区域是在哪里,个人认为应该按照曲率进行线段分割,既能够保证曲线的圆滑,又可以尽量减少线段的数量。
最简单的办法就是以原点中心为圆心,以与x轴夹角为量度,平均分配弧度,与y=k/x相交,链接这些所有的点,理论上这些线段的夹角应该相同(或近似),你分配的单位弧度越小,精度越高。
creatline(1000,360,this.graphics);
k值别太小,记住这是像素,精度80就非常圆滑了,还有曲线是倒着的,因为flash里y轴是向下的,原点在左上角。如果想跟常用坐标一样,就将y值为负,然后x减去你想要的位置。
function creatline(k:Number,jingdu:int,g:Graphics){
var unit:Number=Math.PI*0.5/jingdu;
var x:Number=Math.sqrt(k/Math.tan(unit));
var y:Number=k/x;
g.clear();
g.lineStyle(1,0x000000);
g.moveTo(x,y);
var max:int=jingdu;
for(var i:int=2;i<max;i++){
x=Math.sqrt(k/Math.tan(unit*i));
y=k/x;
g.lineTo(x,y);
}
}
以后的graphics.lineTo(终点),这里的终点就是下一个线段的起点。
要划这个曲线首先要知道自己划的区域是在哪里,个人认为应该按照曲率进行线段分割,既能够保证曲线的圆滑,又可以尽量减少线段的数量。
最简单的办法就是以原点中心为圆心,以与x轴夹角为量度,平均分配弧度,与y=k/x相交,链接这些所有的点,理论上这些线段的夹角应该相同(或近似),你分配的单位弧度越小,精度越高。
creatline(1000,360,this.graphics);
k值别太小,记住这是像素,精度80就非常圆滑了,还有曲线是倒着的,因为flash里y轴是向下的,原点在左上角。如果想跟常用坐标一样,就将y值为负,然后x减去你想要的位置。
function creatline(k:Number,jingdu:int,g:Graphics){
var unit:Number=Math.PI*0.5/jingdu;
var x:Number=Math.sqrt(k/Math.tan(unit));
var y:Number=k/x;
g.clear();
g.lineStyle(1,0x000000);
g.moveTo(x,y);
var max:int=jingdu;
for(var i:int=2;i<max;i++){
x=Math.sqrt(k/Math.tan(unit*i));
y=k/x;
g.lineTo(x,y);
}
}
更多追问追答
追答
x-200,就负了,就到远原点左边去了,y的负值就跑到原点上面去了,也就是说你现在将图像画到了原点的左上方,一般原点都在影片的左上角,那么很可能你画到屏幕外面了,再有你要确定你那个文字输入确定是正确的数字,最好trace一下那个k值,是否是非0的数字。
其实,你最好用我原始的方法绘制到单独的影片剪辑中,然后移动影片剪辑的位置,然后再修改缩放的值,将y轴缩放改为-1,这样更清晰明了。
其实反比例函数绘制一次就足够了,你的k值实际上就是图像的缩放比例。嘿嘿。
一次性绘制,增加第一个点和最后一个点,分别在x轴和y轴的极远端,比例符合你的函数。以后就通过k值进行缩放就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询