עבור לתוכן

עזרה עם פרויקט בית ספר

Featured Replies

פורסם

תראו יש לנו בבית ספר מגמה שבה אנו צריכים להכין פרויקט בשפה : C#

עכשיו

נתקלתי בכמה בעיות עם הפרויקט

קודם כל זה הקישור אליו:

http://www.mytempdir.com/1294965

הבעיות:

שאני מצייר פונקציה.. היא עוברת את הגבולות של הPANNEL

-המערכת צירים והגרפים נמחקים שעוברים את גבולות המסך, או שעולים על התוכנית חלונות.

-חישוב פונקצית ^. אם אתם יכולים לראות שעושים x^2 אז זה מצייר מצד החיובי של ציר X כמו שצריך וצד שמאל לכוון למטה..

הוא כאילו חושב שכל הפונקציה מינוס.. :\

-יחסים של הצירים.. הגרפים נראים קטנים ורציתי לדעת איך אני עושה "ZOOM" בשביל לראות את הגרף יותר גדול.. זאת אומרת להגדיל רזולוציה אבל רק ל- PANEL של הגרף.

-משהו מתפקשש שאני מחשב פונקצית TANx וזה קשור ל-DLL..

הDLL לקחתי מהאינטרנט זה בעצם נותן לי אפשרות לחשב כל משוואה.. (אבל בלי X) את האפשרות של החלפת X במספר אני הוספתי וזה יוצר לי כמה בעיות

חשבתי אולי תוכלו לעבור על התוכנית ולעזור לי לתקן את הבעיות

אני אשמח לעזרה.. כי זה כבר דחוף חח

תודה, נימרוד

פורסם

לא קראתי את הקו שלך, אך יתכן שיהיו לי פתרונות לחלק מהבעיות שלך:

1) נפתח כאן לא מזמן תרד שעסק בנושא של הציור שנעלם. תחפש אותו.

2) Y=0 נמצא בחלק העליון של המסך ולא בחלק התחתון. הערכים בידיוק הפוכים ממערכת צירים רגילה. כדי לקבל את הY החדש אתה צריך לעשות A-y כאשר A מציין את המיקום של ציר הX במסך(שיעור הY שלו), וY הוא הY של הפונקציה. אולי זו הבעיה שלך.

3) אמרת שיש לך DLL שמחשב ערכים של פונקציה. למה שלא תשלח לה תחום ערכים אחר(למשל תחום ערכים פי 3 יבצע זום ב-3), ובסוף תכפיל את הערכים שהתקבלו ב3 כדי שהזום יתבצע גם על הY.

אם יש לך בעיות יותר ספציפיות עם קוד ספציפי תרשום אותו כאן(בצורה מצומצמת, אין לי כוח לקרוא את כל הקוד של הפרוייקט).

פורסם
  • מחבר

לא קראתי את הקו שלך, אך יתכן שיהיו לי פתרונות לחלק מהבעיות שלך:

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 ביחד לא? :|

פורסם

1) הרעיון הוא שאתה צריך להוסיף לPAINT של הFORM את הפונקציה שמציירת את הגרף הנוכחי. בלי קשר לBITMAP או לא.

2) על המחשב, ככל שערך הY גדול יותר, כך הנקודה תהייה נמוכה יותר. ציר הY הפוך. תראה את התמונה שהוספתי.

3) אם יש לך פונקציה

f(x)

אז

f(ax)

מותח בציר הX

ו

bf(x)

מותח בציר הY

bf(ax)

מותח בשניהם.

תשחק עם זה.

[attachment deleted by admin]

פורסם
  • מחבר

סבבה בקשר לזום אני חושב שאני יודע איך לסדר

אבל עדיין לא הבנתי איך לסדר את 2 :\

פורסם

פשוט תהפוך את ציר הY.

(או למתוח אותו ב-1).

פורסם
  • מחבר

אתמול ניסיתי לסדר את מה שאמרת

ולהגדיל את הרזולוןציה

וזה פשוט לא עובד!!!!!

אני לא מצליחח

יש מצב שאתה מנסה? אני כבר משתגע פה! :nixweiss:

פורסם

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

פורסם
  • מחבר


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

ויש לי בעיות איתה

זה כאילו יש לו בעיה עם מיספרים לא שלמים (בחישוב)

הקלאס שאני משתמש בוא כן מחשב מספרים לא שלמים ככה שזה ממש מוזר.

זה לא בעיה עם הקלאס.

אבל משום מה זה לא מצייר נכון.. אני פשוט עובד על זה ממש הרבה ולא מצליח לפתור.

אשמח אם מישהו יעיף מבט ויגיד לי מה הבעיה.

פורסם
  • מחבר

טוב..

הצלחתי לפתור את הבעיה של ה- ZOOM

אחרי שדיברתי עם 2 אנשים שמנוסים ממש בזה חח איזה שעה ככה

עכשיו אני מנסה לעבוד על הגבולות...

למישהו יש הצעה איך לעשות את זה יעיל ומהיר?

פורסם

1) מה הכוונה בגבולות?

2) אל תשלח DOUBLE POST. זה אסור בחוקי הפורום.

3) איך פתרת את הבעיה?

פורסם
  • מחבר

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

פורסם

דרך אגב, הערה שלא קשורה לבעיה שלך: אתה לא משחרר כמו שצריך את האובייקטים הגרפיים (כמו Brush, Pen, Graphics).

אובייקטים כאלה מקצים זכרון שלא משתחרר אוטומטית על ידי ה GC ולכן אתה צריך לקרוא למתודה Dispose של כל אחד מהם אחרת אתה "מדליף" זכרון (לא משחרר זכרון אחרי שהתוכנית נסגרת).

פורסם
  • מחבר

דרך אגב, הערה שלא קשורה לבעיה שלך: אתה לא משחרר כמו שצריך את האובייקטים הגרפיים (כמו Brush, Pen, Graphics).

אובייקטים כאלה מקצים זכרון שלא משתחרר אוטומטית על ידי ה GC ולכן אתה צריך לקרוא למתודה Dispose של כל אחד מהם אחרת אתה "מדליף" זכרון (לא משחרר זכרון אחרי שהתוכנית נסגרת).

לא הבנתי כל כך מה אתה מסביר פה.. שאני מאבד זכרון?

ומישהו יכול לעזור לי עם זה שהציור של הפונקציה והגבולות לא יעלם?

פורסם

תסתכל על הקוד הזה. בכל מקרה, הסיבה לבעיה שיש לך היא אי יציבות נומרית בזמן החישוב (החילוק שאתה עושה בקוד זום כנראה קרוב לאפס יוצא לא מדויק בכלל).

[attachment deleted by admin]

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים