مشکل در رسم تاوابع مثلثاتی

JavidFlasher

کاربر فعال
سلام
دوستان ببینید من با یه سری روابط ریاضی توابعی نوشتم که مختصات دستگاه مختصات رو به مختصات استیج بر میگردونه.
و سپس با توابعDrawing APIجدول رسم کردم
و همینطور میتونم نمودار رسم کنم اما نمودارم دقیق نیست!!
آیا کلاسی الگوریتمی واسه رسم نمودار وجود نداره؟؟؟
این رو ببینین:
اگه میخواین تست کنین فقط heightو widthاستیج رو هم اندازه کنین.
PHP:
import flash.text.TextField;
import flash.text.TextFormat;

//draw diagram menu
graphics.lineStyle(0);
graphics.moveTo(0,stage.stageHeight/2);
graphics.lineTo(stage.stageWidth,stage.stageHeight/2);
graphics.moveTo(stage.stageWidth/2,0);
graphics.lineTo(stage.stageWidth/2,stage.stageHeight);

//add Possition Number
for (var j:Number=-100; j<100; j++)
{
	addPossitionNumber(_x(0),_y(j),String(j));
	addPossitionNumber(_x(j),_y(0),String(j));
}

//draw sin diagram
graphics.lineStyle(0.1,16711680);
graphics.moveTo(_x(-100),_y(Math.sin(-100)));
for (var i:Number=-100; i<100; i++)
{
	
	graphics.lineTo(_x(i),_y(3*Math.sin(i)));
}

//possition change function's for Math Diagram;
function _x(x:Number)
{
	var a:Number = stage.stageHeight / 200;
	var b:Number = 100 * a;
	var c:Number = x * a + b;
	return c;
}
function _y(y:Number)
{
	var a:Number = stage.stageHeight / -200;
	var b:Number = -100 * a;
	var c:Number = y * a + b;
	return c;
}

function addPossitionNumber(x:Number,y:Number,label:String)
{
	var txt:TextField=new TextField();
	var tf:TextFormat=new TextFormat();
	tf.size = 2;
	txt.x = x--;
	txt.y = y--;
	txt.text = label;
	txt.selectable = false;
	txt.setTextFormat(tf);
	addChild(txt);
}

اینجوری میشه:
attachment.php
 

پیوست ها

  • sin.jpg
    sin.jpg
    30.4 کیلوبایت · بازدیدها: 34
آخرین ویرایش:

++Hadi++

Active Member
بله
با تابع Math.sin
البته یه نونه تو امضام هست . ولی وقتی درجه رو تو یه متغیر ار منفی فلان شزوع کن و تو Enter_Frame هی یکی یکی بهش اضافه کنی و بعد او.ن بشه ایکست (جهت حرکت ر مختصات ایکس) و بعد y اونو از Math.sin(angle) بدست بیاری به راحتی اون چیزی که خواستی می شه البته اگه بخوای طول ارتفاع موجت بالا تر بره باید اونو ضربدر یه چیزی کنی .
 

JavidFlasher

کاربر فعال
ممنون هادی جان خودمم همینکار رو کردم.
ولی اینجوری دقیق در نمیاد برای همین باید حلقمو حساس تر کردم و 0.001واحد میرم جلو
PHP:
or (var i:Number=-100; i<100; i+=00.1) 
{ 
     
    graphics.lineTo(_x(i),_y(3*Math.sin(i))); 
}
تو این حلت درست عمل میکنه.
اما وقتی میخواد همینو پردازش کنه پدر CPUرو در میاره.
و یه مشکل دیگه هم داره موقع scaleنمودارم ریخت lineStyleهم بهم میخوره.
lineStyleرو Noneکردم ولی اگه زیادی زوم کنم ینی همون scaleکنم باز بهم میریزه.
 

++Hadi++

Active Member
PHP:
var angle:Number=0;
addEventListener(Event.ENTER_FRAME,runtime);
function runtime(evt:Event):void
{
mc.y=Math.sin(angle*(Math.PI/180));
   angle++;
}

you must multiple your angle to
PHP:
angle*(Math.PI/180)
 

++Hadi++

Active Member
جاوید کد بالا رو اصلاح کردم . باید می نوشتم y چون جهت y اون در راستای سینوس هست.
 

جدیدترین ارسال ها

بالا