שאלה לממש גאונים

אניממתכנת בשפת פסקל אבל זה לא ממש משנה זו שאלה עקרונית אני מכין תוכנה שמציירת גרפים של פונקציות למשל פרבולות אני מישתמש בפרוצדורה שנקראת putpixel שמניחה פיקסל לפי מיקום (x,y) וצבע, ואני עושה לולאה שתשים פיקסל לפי x מסויים שעולה כל פעם באחד וה-y עולה לפי הםונקציה. עכשיו הבעיה היא כשאני מציב בפרבולה (ax^2+bx+c) a גדול מאחד הוא עושה לי רווח בין הפיקסלים לפי הגודל של a לדוגמא עם הצבתי a=2 אז הוא ישים פיקסל כן פיקסל לא וגם בפונקציה של ישר זה קורה ששמים במקדם של x ערך גבוה מאחד. תודה מראש

תשובה

בלולאה שלך (עם משתנה ה-X), אל תקדם את X ב-1 כל פעם אלא ב-0.01 זה אולי יאיט לך קצת את הציור אבל הקו שלך יהיה הרבה יותר רציף. מה שקורה הוא שהפיסקסלים הם קואורדינטות שלמות (אין על המסך 17.5, 16.6) ולכן המחשב "מעגל פינות" ולפעמים מדלג. אם ה-X שלך יתקדם בצעדים קטנים מאד, כל עיגול יהיה יותר מדויק.

אבל לולאה יכולה לעבוד רק עם משתנים שלמים

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

סירטוט פונקציות

אומנם לולאת for עובדת עם משתנים שלמים, אבל ישנן לולאות while ו-repeat שבהן אתה יכול להשתמש. בנוסף אתה יכול להשתמש בפונקצית Trunc בכדי "לעגל" את התוצאות כך שתוכל להציג אותן כפיקסלים על המסך. בכל מצב, תלוי בפונקציה שאתה רוצה לסרטט, יהיו לך רווחים בין הפיקסלים, הפתרון לבעיה זו היא לסרטט קוים בין הפיקסלים, כך תקבל פונקציה רציפה עד כמה שניתן. אולם יווצרו בעיות אחרות כגון באסימפטוטות...

שני פתרונות:

לעשות לולאת FOR נוספת של 1 עד 100 (עבור משתנה I), ולשלוח (לפונקציה שמחשבת את הפרבולה) את X+I/100 במקום רק את X (ואז לעגל את התוצאה). למען ה"יופי" כדי לפצל את הלולעה לשנים, 1 עד 50, ו 51 עד 100, וקטע השני (של 50 עד 100) להוסיף 1 ל X בPUTPIXLE אפשרות אחרת היא הלשתמש ב LINETO (צריך לבדוק ב HELP איך בדיוק להפעיל). וכך ליצור קו בין כל הנקודות.

אני לא מבין מה הבעיה לצעוד עם X ב-0.01 צעדים כל פעם. אפשר להגדיר אותו כ-float או real אם אני זוכר טוב בפסקל.

בלולאה, גם אם אתה אומר לו (putpixel(4.56, 6.73 הוא יקבל את זה ויעשה את "עיגול הפינות" באופן אוטומטי. נסה ותראה - הייתי פעם בסיפור הזה :-)

לא בכל פסקל אפשר

קודם כל, לא בכל פסקל אפשר לעשות PUTPIXEL אם REAL. וגם אי אפשר לעשות לולאת FOR אם REAL. הוא לא רוצה לשנות (הרבה) את מיבנה התוכנה, לכן הוספת לולאה נוספת (שעושה 100 צעדים) היא הפתרון הטוב ביותר (והקל ביותר לישום).

באיזה פסקל אפשר לעשות איזה

עבור לעמוד
בחזרה לפורום
כרגע בפורום זה: אין משתמשים רשומים
עבור לפורום:
תיכנות
בחר
בחר