פורסם 2007 באפריל 1418 שנים תראו יש לנו בבית ספר מגמה שבה אנו צריכים להכין פרויקט בשפה : C#עכשיו נתקלתי בכמה בעיות עם הפרויקטקודם כל זה הקישור אליו:http://www.mytempdir.com/1294965הבעיות:שאני מצייר פונקציה.. היא עוברת את הגבולות של הPANNEL-המערכת צירים והגרפים נמחקים שעוברים את גבולות המסך, או שעולים על התוכנית חלונות.-חישוב פונקצית ^. אם אתם יכולים לראות שעושים x^2 אז זה מצייר מצד החיובי של ציר X כמו שצריך וצד שמאל לכוון למטה..הוא כאילו חושב שכל הפונקציה מינוס.. :\-יחסים של הצירים.. הגרפים נראים קטנים ורציתי לדעת איך אני עושה "ZOOM" בשביל לראות את הגרף יותר גדול.. זאת אומרת להגדיל רזולוציה אבל רק ל- PANEL של הגרף.-משהו מתפקשש שאני מחשב פונקצית TANx וזה קשור ל-DLL..הDLL לקחתי מהאינטרנט זה בעצם נותן לי אפשרות לחשב כל משוואה.. (אבל בלי X) את האפשרות של החלפת X במספר אני הוספתי וזה יוצר לי כמה בעיותחשבתי אולי תוכלו לעבור על התוכנית ולעזור לי לתקן את הבעיותאני אשמח לעזרה.. כי זה כבר דחוף חחתודה, נימרוד
פורסם 2007 באפריל 1418 שנים לא קראתי את הקו שלך, אך יתכן שיהיו לי פתרונות לחלק מהבעיות שלך:1) נפתח כאן לא מזמן תרד שעסק בנושא של הציור שנעלם. תחפש אותו.2) Y=0 נמצא בחלק העליון של המסך ולא בחלק התחתון. הערכים בידיוק הפוכים ממערכת צירים רגילה. כדי לקבל את הY החדש אתה צריך לעשות A-y כאשר A מציין את המיקום של ציר הX במסך(שיעור הY שלו), וY הוא הY של הפונקציה. אולי זו הבעיה שלך.3) אמרת שיש לך DLL שמחשב ערכים של פונקציה. למה שלא תשלח לה תחום ערכים אחר(למשל תחום ערכים פי 3 יבצע זום ב-3), ובסוף תכפיל את הערכים שהתקבלו ב3 כדי שהזום יתבצע גם על הY.אם יש לך בעיות יותר ספציפיות עם קוד ספציפי תרשום אותו כאן(בצורה מצומצמת, אין לי כוח לקרוא את כל הקוד של הפרוייקט).
פורסם 2007 באפריל 1418 שנים מחבר לא קראתי את הקו שלך, אך יתכן שיהיו לי פתרונות לחלק מהבעיות שלך: 1) נפתח כאן לא מזמן תרד שעסק בנושא של הציור שנעלם. תחפש אותו. 2) Y=0 נמצא בחלק העליון של המסך ולא בחלק התחתון. הערכים בידיוק הפוכים ממערכת צירים רגילה. כדי לקבל את הY החדש אתה צריך לעשות A-y כאשר A מציין את המיקום של ציר הX במסך(שיעור הY שלו), וY הוא הY של הפונקציה. אולי זו הבעיה שלך. 3) אמרת שיש לך DLL שמחשב ערכים של פונקציה. למה שלא תשלח לה תחום ערכים אחר(למשל תחום ערכים פי 3 יבצע זום ב-3), ובסוף תכפיל את הערכים שהתקבלו ב3 כדי שהזום יתבצע גם על הY. אם יש לך בעיות יותר ספציפיות עם קוד ספציפי תרשום אותו כאן(בצורה מצומצמת, אין לי כוח לקרוא את כל הקוד של הפרוייקט). הקוד של הפרויקט הזה ממש קצר.. ככה שלא בעיה לקרוא אותו לגבי 1. דיברו שם על BITMAP ואני ממש מצייר ב-C#.. לא מוסיף תמונה כלשהי.. ככה שאין לי מושג איך לסדר.. אם תוכל לפשט לי את העניין אולי אני יבין. 2. לא כל כך הבנתי למה אתה מתכוון 3. ניסיתי לעשות את מה שאמרת. אבל צריך גם לשנות את הגודל של X ו Y ביחד לא?
פורסם 2007 באפריל 1418 שנים 1) הרעיון הוא שאתה צריך להוסיף לPAINT של הFORM את הפונקציה שמציירת את הגרף הנוכחי. בלי קשר לBITMAP או לא.2) על המחשב, ככל שערך הY גדול יותר, כך הנקודה תהייה נמוכה יותר. ציר הY הפוך. תראה את התמונה שהוספתי.3) אם יש לך פונקציה f(x)אז f(ax)מותח בציר הXוbf(x)מותח בציר הYbf(ax)מותח בשניהם.תשחק עם זה.[attachment deleted by admin]
פורסם 2007 באפריל 1418 שנים מחבר סבבה בקשר לזום אני חושב שאני יודע איך לסדראבל עדיין לא הבנתי איך לסדר את 2 :\
פורסם 2007 באפריל 1518 שנים מחבר אתמול ניסיתי לסדר את מה שאמרת ולהגדיל את הרזולוןציה וזה פשוט לא עובד!!!!! אני לא מצליחח יש מצב שאתה מנסה? אני כבר משתגע פה!
פורסם 2007 באפריל 1618 שנים private void button1_Click(object sender, EventArgs e) { MathParser.Parser theParser = new Parser(); string theFunction = textbox.Text; //theParser.Evaluate(theFunction); //Console.WriteLine(theParser.Result); //Console.ReadLine(); Graphics g = CreateGraphics(); Brush myBrush = new SolidBrush(Color.Black); Pen myPen = new Pen(myBrush); string fun = textbox.Text; int x0 = System.Convert.ToInt32(panel1.Width / 2); int y0 = System.Convert.ToInt32(panel1.Height / 2); int yT = 0; int xT = 0; double stretchH = 1, stretchW = 0.05; for (int i = -x0; i <= x0; i++) { theFunction = fun.Replace("x", "(" + (i * stretchW) + ")"); theParser.Evaluate(theFunction); double d = stretchH * theParser.Result; int y1 = System.Convert.ToInt32(d); if (i != -x0) { g.DrawLine(myPen, panel1.Left + panel1.Width / 2 + xT + 1, panel1.Top + panel1.Height / 2 - yT, panel1.Left + panel1.Width / 2 + i + 1, panel1.Top + panel1.Height / 2 - y1); } yT = y1; xT = i; //g.DrawRectangle(myPen, panel1.Left + panel1.Width / 2 + i, panel1.Top + panel1.Height / 2 - y1, 0, 0); } } }
פורסם 2007 באפריל 1618 שנים מחבר private void button1_Click(object sender, EventArgs e) { MathParser.Parser theParser = new Parser(); string theFunction = textbox.Text; //theParser.Evaluate(theFunction); //Console.WriteLine(theParser.Result); //Console.ReadLine(); Graphics g = CreateGraphics(); Brush myBrush = new SolidBrush(Color.Black); Pen myPen = new Pen(myBrush); string fun = textbox.Text; int x0 = System.Convert.ToInt32(panel1.Width / 2); int y0 = System.Convert.ToInt32(panel1.Height / 2); int yT = 0; int xT = 0; double stretchH = 1, stretchW = 0.05; for (int i = -x0; i <= x0; i++) { theFunction = fun.Replace("x", "(" + (i * stretchW) + ")"); theParser.Evaluate(theFunction); double d = stretchH * theParser.Result; int y1 = System.Convert.ToInt32(d); if (i != -x0) { g.DrawLine(myPen, panel1.Left + panel1.Width / 2 + xT + 1, panel1.Top + panel1.Height / 2 - yT, panel1.Left + panel1.Width / 2 + i + 1, panel1.Top + panel1.Height / 2 - y1); } yT = y1; xT = i; //g.DrawRectangle(myPen, panel1.Left + panel1.Width / 2 + i, panel1.Top + panel1.Height / 2 - y1, 0, 0); } } }תראה.. ניסיתי ויש עם זה בעיותקודם כל זה לא מצייר כמו שצריך פרבולה וכו'וגם אתה פשוט הכפלת את X ו Yוזה לא נכוןכי אם תנסה את הפונקציה הכי פשוטה "X" תראה שיצא לך שיפוע שגוי.בכל מקרה תראה מה אני ניסיתי לעשותעדכון:http://www.mytempdir.com/1298013ניסיתי כבר יומיים לעבוד על המערכת של ה- ZOOMויש לי בעיות איתהזה כאילו יש לו בעיה עם מיספרים לא שלמים (בחישוב)הקלאס שאני משתמש בוא כן מחשב מספרים לא שלמים ככה שזה ממש מוזר.זה לא בעיה עם הקלאס.אבל משום מה זה לא מצייר נכון.. אני פשוט עובד על זה ממש הרבה ולא מצליח לפתור.אשמח אם מישהו יעיף מבט ויגיד לי מה הבעיה.
פורסם 2007 באפריל 1718 שנים מחבר טוב..הצלחתי לפתור את הבעיה של ה- ZOOMאחרי שדיברתי עם 2 אנשים שמנוסים ממש בזה חח איזה שעה ככהעכשיו אני מנסה לעבוד על הגבולות...למישהו יש הצעה איך לעשות את זה יעיל ומהיר?
פורסם 2007 באפריל 1718 שנים 1) מה הכוונה בגבולות?2) אל תשלח DOUBLE POST. זה אסור בחוקי הפורום.3) איך פתרת את הבעיה?
פורסם 2007 באפריל 1718 שנים מחבר 1) מה הכוונה בגבולות?2) אל תשלח DOUBLE POST. זה אסור בחוקי הפורום.3) איך פתרת את הבעיה?1. זאת אומרת שהציור של הגרף לא יעבור את גבולות ה- PANEL.2. סליחה לא ידעתי לא יקרה שוב.3. תראה זה קצת יותר מוכב וגם היית בעיה עם מספרים לא שלמים ב- תוצאה של הפונקציההנה התשובה private void button1_Click(object sender, EventArgs e) { Function fn = new Function(); MathParser.Parser theParser = new Parser(); string theFunction = textbox.Text; Graphics g = CreateGraphics(); Brush myBrush = new SolidBrush(Color.Black); Pen myPen = new Pen(myBrush); string fun = textbox.Text; float gridx = System.Convert.ToInt32(panel1.Left + panel1.Width / 2); float gridy = System.Convert.ToInt32(panel1.Top + panel1.Height / 2); float yT = 0; float i; for (i = -(270 / zoom); i <= (270 / zoom); i = i + (((float)0.27) / zoom)) { float num = i + (1 / zoom); float num1 = i; theFunction = fun.Replace("x", num1.ToString()); fn.Parse(theFunction); fn.Infix2Postfix(); fn.EvaluatePostfix(); double nResult = fn.Result; float y1 = (float)nResult; theFunction = fun.Replace("x", num.ToString()); fn.Parse(theFunction); fn.Infix2Postfix(); fn.EvaluatePostfix(); nResult = fn.Result; float y2 = (float)nResult; if (i > -(panel1.Width / 2) / zoom) { g.DrawLine(myPen, (gridx) + (i * zoom), //point x1 (gridy) - (yT * zoom), //point y1 (gridx) + (i + 1 / zoom) * zoom, //point x2 (gridy) - (y2 * zoom)); //point y2 } yT = y1; }או פה: http://rafb.net/p/RGALs477.htmlיש עכשיו בעיה שאני לא כל כך מבין אותה.אני שם כל פונקציה שהיאוכשהיא מגיעה קרוב ל-0 זה קופץ לי למעלה\למטה ואני עדיין לא מבין למה זה קורה..אם בא לך להעיף מבט אני אשמחהנה התוכנית המעודכנת:http://www.mytempdir.com/1298714
פורסם 2007 באפריל 1718 שנים דרך אגב, הערה שלא קשורה לבעיה שלך: אתה לא משחרר כמו שצריך את האובייקטים הגרפיים (כמו Brush, Pen, Graphics).אובייקטים כאלה מקצים זכרון שלא משתחרר אוטומטית על ידי ה GC ולכן אתה צריך לקרוא למתודה Dispose של כל אחד מהם אחרת אתה "מדליף" זכרון (לא משחרר זכרון אחרי שהתוכנית נסגרת).
פורסם 2007 באפריל 1718 שנים מחבר דרך אגב, הערה שלא קשורה לבעיה שלך: אתה לא משחרר כמו שצריך את האובייקטים הגרפיים (כמו Brush, Pen, Graphics).אובייקטים כאלה מקצים זכרון שלא משתחרר אוטומטית על ידי ה GC ולכן אתה צריך לקרוא למתודה Dispose של כל אחד מהם אחרת אתה "מדליף" זכרון (לא משחרר זכרון אחרי שהתוכנית נסגרת).לא הבנתי כל כך מה אתה מסביר פה.. שאני מאבד זכרון?ומישהו יכול לעזור לי עם זה שהציור של הפונקציה והגבולות לא יעלם?
פורסם 2007 באפריל 1718 שנים תסתכל על הקוד הזה. בכל מקרה, הסיבה לבעיה שיש לך היא אי יציבות נומרית בזמן החישוב (החילוק שאתה עושה בקוד זום כנראה קרוב לאפס יוצא לא מדויק בכלל).[attachment deleted by admin]
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.