דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. מציאת נקודה על פי מעלות זוית

מציאת נקודה על פי מעלות זוית

מתוזמן נעוץ נעול הועבר ארכיון code613m
30 פוסטים 3 כותבים 1.8k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #2

    רפרפתי על השאלה ולכאורה השאלה היא מתמטית,
    אז כדאי לך שלא לצמצם את קשת העונים הפוטנציאלים לכאלו שיש להם ויזואל סטודיו + זמן + ידע בVB.NET.
    תנסח גיאומטרית, ואז הרבה יוכלו לענות בין רגע.
    כמו"כ תרפרף על פונקציות גיאומטריות באקסל, אולי תמצא שם פונקציה שזה בדיוק פעולתה.

    פורסם במקור בפורום CODE613 ב15/08/2013 12:09 (+03:00)

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

    בכל נושא אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #3

      העינין הוא שכמו שרואים בדוגמא שצירפתי יש לי מידע כמה מעלות יש בין נקודת האמצע של החלון למיקום הסמן ועל פי זה אני קורא לפונקציה e.Graphics.DrawArc ופונקציה זו באמת יודעת לצייר את הקשת עד המעלה המבוקשת כלומר עד לסמן, אבל אני צריך לדעת מה הנקודה הזו בשפת הקואורדינטות כלומר מה הX וה Y של נקודה זו, כך שמבחינה מתמטית יש לי את הפונקציה אני רק צריך להמיר מידע זה לקואורדינטות.

      בכל אופן איפה ממולץ לשאול שאלות כאלו?

      פורסם במקור בפורום CODE613 ב15/08/2013 13:01 (+03:00)

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #4

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

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

        ואגב זה בדיוק המקום לדעתי לשאול כאלו שאלות, המשך להחכימנו!

        פורסם במקור בפורום CODE613 ב15/08/2013 13:15 (+03:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #5

          העיגול כידוע הוא בסך הכל 360 מעלות, מעלת האפס לפי מה שהבנתי עומדת בצד ימין באמצע הגובה בדיוק איפה שמספר 3 בשעון למשל מספר 6 בשעון עומד במעלה 90 ומספר 9 במעלה 180 ומספר 12 במעלה 270.

          כשאני רוצה שקשת תתחיל במספר 9 בשעון עד מספר 12 אני קורא ל:
          e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle)

          ואז startAngle יהיה 180 ואורך הקשת שזה sweepAngle יהיה 90 מעלות וכך נגיע מ180 ל270 .

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

          כדי להבין את זה יותר באמת מומלץ להריץ את הקוד.

          פורסם במקור בפורום CODE613 ב15/08/2013 13:32 (+03:00)

          תגובה 1 תגובה אחרונה
          0
          • M מנותק
            M מנותק
            magicode
            כתב ב נערך לאחרונה על ידי
            #6

            תעלה תמונה.
            אני למשל לא יכול לפתוח את vb כי אני על לינוקס.

            פורסם במקור בפורום CODE613 ב15/08/2013 13:38 (+03:00)

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #7

              הסמן בזמן צילום המסך היה למעלה באמצע איפה שהקשת מסתיימת בזמן תנועת הסמן הקשת גדלה/קטנה בהתאמה.

              תמונה/קובץ מצורף לא נמצא

              פורסם במקור בפורום CODE613 ב15/08/2013 13:44 (+03:00)

              תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #8

                ניסוח השאלה לטעמי.
                בהינתן נקודה בעיגול (במעלות, אין דרך אחרת) מהם הX,Y של הנקודה.

                פורסם במקור בפורום CODE613 ב15/08/2013 14:05 (+03:00)

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #9

                  מקוה שיעזור:
                  http://stackoverflow.com/questions/2526200/find-coordinate-by-angle

                  פורסם במקור בפורום CODE613 ב15/08/2013 14:22 (+03:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • M מנותק
                    M מנותק
                    magicode
                    כתב ב נערך לאחרונה על ידי
                    #10

                    אתה צריך להשתמש ב sin ו בcos כדי למצוא את המיקום

                    בניתי משהו קטן שמדגים ב js
                    http://jsfiddle.net/APYpD/1/

                    sin מוצא לך את היחס בגובה כלומר מעלה 0 זה 0 מעלה 90 זה 1

                    cos מוצא לך את היחס ברוחב כלומר 0 יהיה 1 90 יהיה 0 ו180 יהיה -1

                    היחס הוא כלפי הנקודה המרכזית.

                    היחס הוא לפי הרדיוס כלומר 1 רדיוס אם הרדיוס הוא 15 אז 1 * 15

                    פורסם במקור בפורום CODE613 ב15/08/2013 14:36 (+03:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • רחמיםר מנותק
                      רחמיםר מנותק
                      רחמים מורחק
                      כתב ב נערך לאחרונה על ידי
                      #11

                      יפה מאוד!!
                      נראה לי עוד שלוש ארבע שורות ואתה הופך את זה לשעון אנולוגי!

                      פורסם במקור בפורום CODE613 ב15/08/2013 14:57 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • רחמיםר מנותק
                        רחמיםר מנותק
                        רחמים מורחק
                        כתב ב נערך לאחרונה על ידי
                        #12

                        הוספתי על פי הקוד שלך לקוד שלי, אבל עדיין אני רואה שזה לא מאה אחוז:
                        אולי תוסיף לקוד שלך ארוע תנועת סמן במקום להשתמש ב input number

                        Public Class Form1
                        
                            ' Create start and sweep angles on ellipse.
                            Dim startAngle As Single = 0.0F
                            Dim sweepAngle As Single = 270.0F
                            Dim RedEllipseAngle As Single
                        
                            Private Sub Form1_MouseMove(sender As Object,
                                                        e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
                                'שינוי תחילת הקשת
                                'startAngle = GetAngle(Me.ClientSize.Width \ 2, Me.ClientSize.Height \ 2, e.Location.X, e.Location.Y) 
                                'שינוי אורך הקשת
                                sweepAngle = GetAngle(Me.ClientSize.Width \ 2,
                                                      Me.ClientSize.Height \ 2,
                                                      e.Location.X,
                                                      e.Location.Y) - startAngle
                                RedEllipseAngle = GetAngle2(Me.ClientSize.Width \ 2,
                                                      Me.ClientSize.Height \ 2,
                                                      e.Location.X,
                                                      e.Location.Y)
                                Me.Invalidate()
                            End Sub
                        
                            Function GetAngle(ByVal x1 As Single,
                                                 ByVal y1 As Single,
                                                 ByVal x2 As Single,
                                                 ByVal y2 As Single) As Single
                        
                                Dim xDiff As Single = (x1 - x2)
                                Dim yDiff As Single = (y1 - y2)
                                Return (CType(Math.Atan2(yDiff, xDiff), Single) * CType((180 / Math.PI), Single) + 180)
                        
                            End Function
                        
                            Function GetAngle2(ByVal x1 As Single,
                                                   ByVal y1 As Single,
                                                   ByVal x2 As Single,
                                                   ByVal y2 As Single) As Single
                        
                                Dim xDiff As Single = (x1 - x2)
                                Dim yDiff As Single = (y1 - y2)
                                Return (CType(Math.Atan2(yDiff, xDiff), Single) + 66)
                        
                            End Function
                        
                            Private Function GetCoordinate(ByVal angle As Single) As Point
                                Dim x As Single = (Me.ClientSize.Width \ 2) + (Math.Cos(angle) * (Me.ClientSize.Width \ 2))
                                Dim y As Single = (Me.ClientSize.Height \ 2) + (Math.Sin(angle) * (Me.ClientSize.Height \ 2))
                                Return New Point(x, y)
                            End Function
                        
                            Private Sub Form1_Paint(sender As Object,
                                                    e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
                                ' Create pen.
                                Dim blackPen As New Pen(Color.Black, 3)
                                ' Create rectangle to bound ellipse.
                                Dim rect As New Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height)
                                ' Draw arc to screen.
                                e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle)
                                e.Graphics.FillEllipse(Brushes.Red, New Rectangle(GetCoordinate(RedEllipseAngle), New Size(12, 12)))
                            End Sub
                        End Class
                        

                        פורסם במקור בפורום CODE613 ב15/08/2013 15:08 (+03:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • M מנותק
                          M מנותק
                          magicode
                          כתב ב נערך לאחרונה על ידי
                          #13

                          http://jsfiddle.net/APYpD/2/

                          אותם שורות.

                          פורסם במקור בפורום CODE613 ב15/08/2013 15:08 (+03:00)

                          תגובה 1 תגובה אחרונה
                          0
                          • M מנותק
                            M מנותק
                            magicode
                            כתב ב נערך לאחרונה על ידי
                            #14

                            @רחמים

                            הוספתי על פי הקוד שלך לקוד שלי, אבל עדיין אני רואה שזה לא מאה אחוז:
                            אולי תוסיף לקוד שלך ארוע תנועת סמן במקום להשתמש ב input number

                            תנסה ככה

                            RedEllipseAngle = startAngle + GetAngle2(Me.ClientSize.Width \ 2,
                                                          Me.ClientSize.Height \ 2,
                                                          e.Location.X,
                                                          e.Location.Y)
                            

                            פורסם במקור בפורום CODE613 ב15/08/2013 15:14 (+03:00)

                            תגובה 1 תגובה אחרונה
                            0
                            • רחמיםר מנותק
                              רחמיםר מנותק
                              רחמים מורחק
                              כתב ב נערך לאחרונה על ידי
                              #15

                              הנה שיפצתי את הקוד, כעת הוא עובד מצויין אבל רק אם החלון מרובע אבל אם החלון מלבני הנקודה האדומה מתנהגת בצורה מוזרה במעלות 0, 90, 180 ו 270 נפגשת עם הקשת ובמעלות אחרות לא. מדוע?

                              Public Class Form1
                              
                                  ' Create start and sweep angles on ellipse.
                                  Dim startAngle As Single = 0.0F
                                  Dim sweepAngle As Single = 0.0F
                              
                                  Function toRadians(ByVal angle As Single) As Single
                                      Return CSng(angle * (Math.PI / 180))
                                  End Function
                              
                                  Private Sub Form1_MouseMove(sender As Object,
                                                              e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
                                      'שינוי תחילת הקשת על פי הסמן
                                      'startAngle = GetAngle(Me.ClientSize.Width \ 2, Me.ClientSize.Height \ 2, e.Location.X, e.Location.Y) 
                                      'שינוי אורך הקשת על פי הסמן
                                      sweepAngle = GetAngle(Me.ClientSize.Width \ 2,
                                                            Me.ClientSize.Height \ 2,
                                                            e.Location.X,
                                                            e.Location.Y) - startAngle
                                      Me.Invalidate()
                                  End Sub
                              
                                  Function GetAngle(ByVal x1 As Single, ByVal y1 As Single,
                                                    ByVal x2 As Single, ByVal y2 As Single) As Single
                              
                                      Dim xDiff As Single = (x1 - x2)
                                      Dim yDiff As Single = (y1 - y2)
                                      Return (CSng(Math.Atan2(yDiff, xDiff)) * CSng(180 / Math.PI) + 180)
                              
                                  End Function
                              
                                  Private Function GetCoordinate(ByVal angle As Single) As Point
                                      Dim Radian As Single = toRadians(angle)
                                      Dim x As Single = (Me.ClientSize.Width \ 2) + CSng(Math.Cos(Radian) * (Me.ClientSize.Width \ 2))
                                      Dim y As Single = (Me.ClientSize.Height \ 2) + CSng(Math.Sin(Radian) * (Me.ClientSize.Height \ 2))
                                      Return New Point(x - 6, y - 6)
                                  End Function
                              
                                  Private Sub Form1_Paint(sender As Object,
                                                          e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
                                      ' Create pen.
                                      Dim blackPen As New Pen(Color.Black, 3)
                                      ' Create rectangle to bound ellipse.
                                      Dim rect As New Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height)
                                      ' Draw arc to screen.
                                      e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle)
                                      e.Graphics.FillEllipse(Brushes.Red, New Rectangle(GetCoordinate(startAngle + sweepAngle), New Size(12, 12)))
                                  End Sub
                              
                                  Public Sub New()
                              
                                      ' This call is required by the designer.
                                      InitializeComponent()
                              
                                      ' Add any initialization after the InitializeComponent() call.
                                      Me.Height = Me.Width * 2
                                  End Sub
                              End Class
                              

                              פורסם במקור בפורום CODE613 ב15/08/2013 19:03 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • רחמיםר מנותק
                                רחמיםר מנותק
                                רחמים מורחק
                                כתב ב נערך לאחרונה על ידי
                                #16

                                ככה זה נראה, הכדור האדום לא נמצא בקצה של הקשת.

                                תמונה/קובץ מצורף לא נמצא

                                פורסם במקור בפורום CODE613 ב16/08/2013 00:04 (+03:00)

                                תגובה 1 תגובה אחרונה
                                0
                                • dovidD מנותק
                                  dovidD מנותק
                                  dovid ניהול
                                  כתב ב נערך לאחרונה על ידי
                                  #17

                                  כל הנוסחה מתבססת על תכונות מרובע ועיגול, לא מלבן ואליפסה.
                                  במקרה של מלבן ואליפסה תתייחס כאילו זה מרובע כאשר הצלע/קוטר שוה לצלע הקטן שבמלבן, ואת תוצאת הXY תמיר למלבן לפי היחס.
                                  לדוגמא מלבן בגודל 20:10, אתה מתייחס כאילו הוא 10:10 וכאשר מתקבלת לך תוצאת XY כזאת: 5,7 אתה מכפיל את ה5 ביחס בין הצלעות (הקטן לחלק לגדול) במקרה זה 2.

                                  פורסם במקור בפורום CODE613 ב18/08/2013 11:14 (+03:00)

                                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • רחמיםר מנותק
                                    רחמיםר מנותק
                                    רחמים מורחק
                                    כתב ב נערך לאחרונה על ידי
                                    #18

                                    שיפצתי לפי דבריך את הפקודה GetCoordinate
                                    וזה מה שיצא, אבל זה לא עובד.

                                    Private Function GetCoordinate(ByVal angle As Single) As Point
                                            Dim Radian As Single = toRadians(angle)
                                            Dim Dis As Integer
                                            Dim WidthIsLarge As Boolean
                                            If Me.ClientSize.Width > Me.ClientSize.Height Then
                                                Dis = Me.ClientSize.Height / 2
                                                WidthIsLarge = True
                                            Else
                                                Dis = Me.ClientSize.Width / 2
                                                WidthIsLarge = False
                                            End If
                                    
                                            Dim x As Single = (Me.ClientSize.Width / 2) + CSng(Math.Cos(Radian) * Dis)
                                            Dim y As Single = (Me.ClientSize.Height / 2) + CSng(Math.Sin(Radian) * Dis)
                                    
                                            If WidthIsLarge = True Then
                                                x = x * (Me.ClientSize.Height / Me.ClientSize.Width)
                                            Else
                                                y = y * (Me.ClientSize.Width / Me.ClientSize.Height)
                                            End If
                                    
                                            Return New Point(x - 6, y - 6)
                                        End Function
                                    

                                    פורסם במקור בפורום CODE613 ב18/08/2013 13:14 (+03:00)

                                    תגובה 1 תגובה אחרונה
                                    0
                                    • M מנותק
                                      M מנותק
                                      magicode
                                      כתב ב נערך לאחרונה על ידי
                                      #19

                                      @דוד ל.ט.

                                      כל הנוסחה מתבססת על תכונות מרובע ועיגול, לא מלבן ואליפסה.
                                      במקרה של מלבן ואליפסה תתייחס כאילו זה מרובע כאשר הצלע/קוטר שוה לצלע הקטן שבמלבן, ואת תוצאת הXY תמיר למלבן לפי היחס.
                                      לדוגמא מלבן בגודל 20:10, אתה מתייחס כאילו הוא 10:10 וכאשר מתקבלת לך תוצאת XY כזאת: 5,7 אתה מכפיל את ה5 ביחס בין הצלעות (הקטן לחלק לגדול) במקרה זה 2.

                                      זה בדיוק מה שהוא כתב.

                                      התוצאה זה יחס והוא מכפיל את היחס באורך וברוחב.

                                      כלומר אם זה 5,7 אז התוצאה ב cos וב sin זה 0.2 , 0 ואז ההמרה תהיה

                                      0.2 * 5 + 5 = 7
                                      0 * 10 * 10 = 10 .

                                      וזה יוצא בדיוק אותו חשבון.

                                      כלומר החשבון הראשון הוא בסדר גמור.

                                      מה אני רואה בתמונה שהעיגול ממשיך את המגמה של הקו כלומר הוא לא סוטה מהמגמה.

                                      זה נראה שיש לו נתון אחר של מעלות.

                                      פורסם במקור בפורום CODE613 ב18/08/2013 14:58 (+03:00)

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • רחמיםר מנותק
                                        רחמיםר מנותק
                                        רחמים מורחק
                                        כתב ב נערך לאחרונה על ידי
                                        #20

                                        @magicode

                                        זה נראה שיש לו נתון אחר של מעלות.

                                        אם יש לו נתון אחר של מעלות מדוע במעלות 0, 90, 180 ו 270 נפגשת הנקודה האדומה עם הקשת ובמעלות אחרות לא?

                                        פורסם במקור בפורום CODE613 ב18/08/2013 15:02 (+03:00)

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • M מנותק
                                          M מנותק
                                          magicode
                                          כתב ב נערך לאחרונה על ידי
                                          #21

                                          אולי תעלה איזה gif מונפש
                                          קשה לראות כזה פער.

                                          פורסם במקור בפורום CODE613 ב18/08/2013 15:04 (+03:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום