לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 24-10-2005, 20:35
צלמית המשתמש של Bumpy
  Bumpy Bumpy אינו מחובר  
 
חבר מתאריך: 14.02.04
הודעות: 339
קלאס גראף עוגה למערכות סקרים

סיימתי את זה לפני כמה שעות
הקוד:
קוד PHP:
<?

class graph
{

var    $Graph;
var $Image;
var $Angels;
var $SliceCount;
var $Slice;
var $Colors;

    function graph($width,$height)
    {
        $this->Graph["title"]=$title;
        $this->Graph["width"]=$width;
        $this->Graph["height"]=$height;
        header("Content-type: image/png");
        $this->Image = @imagecreate($width, $height) or die("Cannot Initialize new GD image");
    }

    function makeTitle($title,$font) {
        $width=imagefontwidth($font);
        $height=imagefontheight($font);
        imagefilledpolygon($this->Image,
                 array (
                    65, 6,
                    65, (6+$height),
                 (65+($width*strlen($title))+4), (6+$height),
                    (65+($width*strlen($title))+4), 6
                 ),
                 4,
                 $this->Colors["white"]);
        imagepolygon($this->Image,
                 array (
                    65, 6,
                    65, (6+$height),
                 (65+($width*strlen($title))+4), (6+$height),
                    (65+($width*strlen($title))+4), 6
                 ),
                 4,
                 $this->Colors["black"]);
        imagestring($this->Image, $font, 68, 6, $title, $this->Colors["black"]);
    }
    function addVote($num,$vote,$r,$g,$b)
    {
        $this->Angels[$num]=$vote;
        $this->Colors[$num]=imagecolorallocate($this->Image, $r, $g, $b);
    }
    function graphBG($r,$g,$b)
    {
        $this->Colors[0]=imagecolorallocate($this->Image, $r, $g, $b);
        $this->Colors["black"] = imagecolorallocate($this->Image, 0, 0, 0);
        $this->Colors["white"] = imagecolorallocate($this->Image, 255, 255, 255);
    }
    function makeAngels()
    {
        $this->SliceCount=count($this->Angels);
        $ar_num_count=0;
        for ($i=1;$i<=$this->SliceCount;$i++) {
            $ar_num_count=$ar_num_count+$this->Angels[$i];
        }
        $this->Slice=360/$ar_num_count;
        $count=0;
    }


    function makeDeatils()
    {
        $x=10;
        $y=10;
        $z=0;

        for ($i=1;$i<=$this->SliceCount;$i++) {
            $ar_num_count=$ar_num_count+$this->Angels[$i];
        }

        //÷åôñà âãåìä
        imagefilledpolygon($this->Image,
             array (
                6, 6,
                5, (9+(15*$this->SliceCount)),
                61, (9+(15*$this->SliceCount)),
                61, 6
             ),
             4,
             $this->Colors["white"]);
        imagepolygon($this->Image,
             array (
                6, 6,
                6, (9+(15*$this->SliceCount)),
                61, (9+(15*$this->SliceCount)),
                61, 6
             ),
             4,
             $this->Colors["black"]);

        //÷åôñàåú ÷èðåú
        for ($i=1;$i<=$this->SliceCount;$i++)
        {
            imagefilledpolygon($this->Image,
                 array (
                    $x, $y+$z,
                    $x, ($y+10+$z),
                    ($x+10), ($y+10+$z),
                    ($x+10), $y+$z
                 ),
                 4,
                 $this->Colors[$i]);
            imagepolygon($this->Image,
                 array (
                    $x, $y+$z,
                    $x, ($y+10+$z),
                    ($x+10), ($y+10+$z),
                    ($x+10), $y+$z
                 ),
                 4,
                 $this->Colors["black"]);

            $num=$this->Angels[$i]*100/$ar_num_count;
         imagestring($this->Image, 2, ($x+14), ($y+$z-1), round($num, 2)."%", $this->Colors["black"]);

            $y+=10;
            $z+=5;
        }
    }


    function drawAngels()
    {
        $c=0;
        for ($i=1;$i<=$this->SliceCount;$i++) {
            $x=$this->Slice*$this->Angels[$i]+$c;
         imagefilledarc($this->Image, $this->Graph["width"]/2, $this->Graph["height"]/2, $this->Graph["width"]*0.8, $this->Graph["height"]*0.8, $c, $x, $this->Colors[$i], IMG_ARC_PIE);
            $c=$x;
        }
        imageellipse($this->Image, $this->Graph["width"]/2, $this->Graph["height"]/2, $this->Graph["width"]*0.8, $this->Graph["height"]*0.8, $this->Colors["black"]);
    }
    
    function finish ()
    {
        imagepng($this->Image);
        imagedestroy($this->Image);
    }

}

$bla=new graph(400,400);
$bla->graphBG(255,255,200);
$bla->makeTitle("What do you say about the site?",2);
$bla->addVote(1, 23, 255, 0, 0);
$bla->addVote(2, 24, 0, 0, 255);
$bla->addVote(3, 25, 0, 255, 0);
$bla->addVote(4, 26, 255, 0, 255);
$bla->addVote(5, 155, 150, 150, 150);
$bla->makeAngels();
$bla->drawAngels();
$bla->makeDeatils();
$bla->finish();

?>


אם מישהו רוצה לראות את זה www.yonatan.co.il/graph.php
קצת הסברים

קוד PHP:
<?

 $bla=new graph(400,400);
//יוצר גראף חדש בגודל 400 על 400
 $bla->graphBG(255,255,200);
//קובע את צבע הרקע של הגראף
 $bla->makeTitle("What do you say about the site?",2);
//כותרת לגראף - לא חובה
 $bla->addVote(1, 23, 255, 0, 0);
//מוסיף הצבעה חדשה
//1=מספר התוצאה
//23=מספר התשובות
//255, 0, 0= צבע
 $bla->addVote(2, 24, 0, 0, 255);
 $bla->addVote(3, 25, 0, 255, 0);
 $bla->addVote(4, 26, 255, 0, 255);
 $bla->addVote(5, 155, 150, 150, 150);
 $bla->makeAngels();
//מחשב זוויות וכ'ו...
 $bla->drawAngels();
//מצייר את הגראף
 $bla->makeDeatils();
//יוצר את הריבוע הקטן עם הפרטים - לא חובה
 $bla->finish();
//מסיים את הגראף
 
 ?>


אשמח לשמוע ביקורות, איך הייתי יכול לשפר מה לא טוב וכ'ו...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
או כן או לא, מה שבטוח אולי, וגם זה מוטל בספק.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 25-10-2005, 22:56
  דקל דקל אינו מחובר  
 
חבר מתאריך: 20.02.03
הודעות: 2,396
בתגובה להודעה מספר 1 שנכתבה על ידי Bumpy שמתחילה ב "קלאס גראף עוגה למערכות סקרים"

בתור התחלה אני חושב שמגיע לך כל הכבוד. בעיקר על עצם העובדה שהחלטת לפרסם את הקוד עצמו, אבל בנוסף על ההחלטה להפוך קוד שלך (שכבר כתבת ועובד) לקוד שכתוב בגישת OOP, ובצורה זו ללמוד את הנושא. אמנם הקוד הזה לא מכיל את כל המאפיינים של התיכנות ב OOP, אבל זאת התחלה, ואני חושב שלמדת המון בעצם הבניה של הסקריפט הזה.
דבר נוסף שאני חושב שכדאי לציין זה את העבודה שלקח לך זמן "לקפוץ" לכיוון של OOP, ולא עשית את הטעות של מתכנתים רבים כיום, שאחרי חודש שהם לומדים PHP הם הולכים לגישה של OOP ונתקעים איתה. יש לך רקע של למעלה משנה בעבודה עם PHP, ואני חושב שהגעת להחלטה נכונה, לגשת רק עכשיו (אחרי שיש לך את כל הרקע בתיכנות) לכיוון של תיכנות מונחה עצמים.
בנוגע לקוד עצמו - הערתי לך הערות במהלך כתיבת הקוד, ואני חושב שתמיד יש מה להוסיף אמנם היתה לך קצת בעיה עם freetype, אבל יכולת להשקיע ולסדר שזה יעבוד בשרתים בהם freetype כן מותקן.
באופן כללי - סקריפט חמוד מאוד. כמובן שנכנס לארכיון אני בטוח שאתה יכול לשבת ולהמשיך לפתח את הנושא

קבל ח"ח,
דקל
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 26-10-2005, 14:27
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
בהמשך למה שדקל אמר, ובתגובה למה ששאלת אותי:
בתגובה להודעה מספר 1 שנכתבה על ידי Bumpy שמתחילה ב "קלאס גראף עוגה למערכות סקרים"

אז ככה:
  • מקריאה ראשונית נראה כאילו makeAngles צריכה להיות פונקציה פרטית
    ולהקרא מתוך drawAngles, כי הפרטים הטכניים(החלוקה הזו) לא אמורה
    לעניין את המשתמש.
    הפרדה בין ממשק למימוש לא נחשבת לאחד משלושת עקרונות ה-OO, אבל
    היא מקובלת ונחשבת לנכונה ותואמת את הגישה באופן עקרוני.
  • נראה כאילו כדאי להעלים את הפונקציה finish:
    • את השורה השניה בה צריך להכניס למפרק.
      מה לעשות עם הראשונה אני עדיין לא בטוח, כי להגיד שאני לא ממש
      יודע PHP יהיה האנדרסטייטמנט של השנה
    • אם נשנה קצת את המבנה של המחלקה הפונקציה הזו לא תהיה
      נחוצה כלל. בסעיף הבא.
  • אולי(ואני מדגיש שרק אולי, אני רוצה לחשוב על זה עוד טיפה) כדאי שתהיה
    רק פונקציית draw אחת שתחליף את drawAngles ו-drawTitle. הפרמטרים
    שלה יקבעו מה לצייר ומה לא. זה נראה לי מעט מסודר יותר, וגם יפתור את
    בעיית ה-finish, כי אז השורה הראשונה של finish תיכנס בסוף draw החדשה.
חוץ מזה, מקריאה ראשונית אני לא רואה משהו "לא OO-י" בקוד. רק מספר הערות קטנות:
אני לא רואה איפה מגדירים טווח-הכרה(scope, כלומר private או public. גם אם משתנים
עם פרטיים בברירת-מחדל ופונקציות הן ציבוריות ב-PHP, עדיף לכתוב זאת במפורש.
באופן OO-י "לחלוטין", אמור להיות ממשק עם כל הפונקציות, ומחלקה שממשת אותו עם
הקוד שלהן. במקרה של מחלקה אחת בלבד, זה לא ממש נחוץ, ובד"כ מתעלמים מזה.
אני מתעב את העובדה שטיפוסי המשתנים נזילים כל-כך, אבל אני מניח שזה קטע של PHP
עצמה... (או שיש דרך להפוך קוד PHP ל-strong-typed?)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 06:57

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר