ברוכים הבאים לאתר תחרויות קודגורו! › פורומים › חידות › מה יצא הציור?
- This topic has 5 תגובות, 2 משתתפים, and was last updated לפני 16 שנים, 7 חודשים by CodeGuru.
-
מאתתגובות
-
10 ביולי 2007 בשעה 05:55 #76934CodeGuruמנהל בפורום
בהנתן משולש המוגדר על ידי שלוש הנקודות
a_1, a_2, a_3
בחר נקודה מקרית
p_0
וחזור
n
פעמים על התהליך בו מוגדרת הנקודה הבאה
p_{t+1}
כממוצע בין הנקודה הקודמת
p_t
לבין קודקוד מקרי של המשולש.
איך תראה קבוצת הנקודות
p_1, p_2, … , p_n ?
ותודה לישי על השאלה.
7 בפברואר 2008 בשעה 00:08 #78287CodeGuruמנהל בפורוםאפשר לכתוב "שורד" פשוט של קודגורו אקסטרים שיעשה זאת.
7 באפריל 2008 בשעה 11:29 #78264yoav zilbermanמשתתףהציור יצא אליפסה שכן אליפסה מוגדרת כממוצע כל הנקודות שלה.
7 באפריל 2008 בשעה 21:54 #78263CodeGuruמנהל בפורוםניסיון יפה אבל התשובה לא נכונה.
8 באפריל 2008 בשעה 13:19 #78262yoav zilbermanמשתתףהרצתי את זה בויזואל בייסיק ויצא לי משולש בצבע שחור שבתוכו עוד מספר משולשים
בצבע המסך (הצבע השחור בגלל צבע הנקודות)
קטע הקוד הוא:
Option Explicit
Private Sub Form_Load()
Dim a1x As Integer
Dim a1y As Integer
Dim a2x As Integer
Dim a2y As Integer
Dim a3x As Integer
Dim a3y As Integer
Dim px As Integer
Dim py As Integer
Dim pnx As Integer
Dim pny As Integer
Dim index As Integer
Dim i As Integer
a1x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
a1y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
a2x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
While (a1x = a2x)
a2x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
Wenda2y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
While (a2y = a1y)
a2y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
Wend
a3x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
While (a3x = a2x Or a3x = a1x)
a3x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
Wend
a3y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
While (a3y = a2y Or a3y = a1y)
a3y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
Wend
While ((a3y – a2y) / (a3x – a2x) = (a2y – a1y) / (a2x – a1x))
a3x = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
a3y = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
Wend
px = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
While (px = a1x Or px = a2x Or px = a3x)
px = px = 7 + Math.Rnd() * (Me.ScaleWidth – 14)
Wend
py = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
While (py = a1y Or py = a2y Or py = a3y)
py = 7 + Math.Rnd() * (Me.ScaleHeight – 14)
Wend
For i = 1 To 30000 Step 1
index = Math.Rnd() * 3
If index = 1 Then
pnx = (px + a1x) / 2
pny = (py + a1y) / 2
'Me.Line (px, py)-(pnx, pny)
px = pnx
py = pny
Me.Circle (pnx, pny), 3
End If
If index = 2 Then
pnx = (px + a2x) / 2
pny = (py + a2y) / 2
' Me.Line (px, py)-(pnx, pny)
px = pnx
py = pny
Me.Circle (pnx, pny), 3
End If
If index = 3 Then
pnx = (px + a3x) / 2
pny = (py + a3y) / 2
' Me.Line (px, py)-(pnx, pny)
px = pnx
py = pny
Me.Circle (pnx, pny), 3
End If
Next i
End Subהאם התשובה נכונה?
נ.ב.
זהו סוג של פרקטל ושמו משולש סירפינסקי!
האם התשובה נכונה?
סלח לי על הבורות של השאלה הקודמת הבנתי אותה כממוצע הנקודות ולא ממוצע של נקודה עם נקודה אקראית על משולש.
9 באפריל 2008 בשעה 07:05 #78261CodeGuruמנהל בפורוםתשובה נכונה – כל הכבוד.
אפשר לכתוב "שורד" קודגורו אקסטרים קצר יותר שעושה זאת.
נתראה ביום שלישי
-
מאתתגובות
- יש להתחבר למערכת על מנת להגיב.