Värst vad det blivit populärt att mäta sina kunskaper på detta forum.... Hej http://www.pellesoft.nu/upload/JohanDcirkel.zip Härligt Johan D... Hej "Alldeles korrekt lösning"? Finns det en "rätt" lösning till detta? Jag blev ganska nöjd med min, fast jag satt ganska länge med den... Fast största delen av tiden gick åt till att leta rätt på små idiotiska fel =( Hade nog med gårddagens festande att göra... Japp just den högskolan ja... Vi som gått där är ju liasom rätt kända för att vara duktiga på det här med programmering.... Åtminstone många av oss.. Det är en bra skola. Ni är säkert garanterat också duktiga..... Det är vi väl alla på ett eller annat sätt. Nu har jag kommenterat koden lite, hoppas att någon förstår nått iaf, annars är det bara att fråga...Utmaningar!
    
    
OK. Här kommer en annan utmaning från mig till de hågade.
Anta att ni har ett formulär... På detta formulär slumpar du ca 200 punkter.
DIN uppgift är att:
Drag en linje mellan de punkter som tillsammans bildar den yttre gränsen för mängden av punkter.
RESULTAT:
Du skall ha ett forulär med en oregelbunden ring där samtliga utslumpade punkter befinner sig på eller innanför ringen.
/Peterh
PS. SvenPon Lösningsförslag till din Radar kommer.....Sv: Utmaningar!
    
    
Jag har löst problemmet, Märkligt resultat !
Ni löser förmodligen probet med matematik
Jag tog ett annat grepp API GetPixel.På min 200 mhz
tar det ca 5 sek innan det bli klart.
Tillägg jag gjorde mitt ex i 500 * 500 pixel
Kul tankenöt där gick halva söndag em.
mvh
SvenSv: Utmaningar!
    
    
Här är mitt förslag. Om någon är intresserad kan jag kommentera programmet, jag orkade inte det nu... Detta är ju farligt med saker att klura på, jag kan ju inte sluta att tänka förrän jag har löst det ;)
/Johan
PS. SvenPon, min lösning tar 20 ms på 800MHz oavsett storlek på formen ;)Sv: Utmaningar!
    
    
Alldeles korrekt lösning och så snabb som den skall vara.
Starta med en slumpvis utvaldpunkt. Leta sedan reda på den punkt vars vinkel till startpunkten är störst. Sedan leta reda på nästa punkt vars vinkel är störts osv tills varvet är fullbordat.
/Peterh
PS. Man skulle nästa kunna tro att du är utbildad på HIG!Sv: Utmaningar!
    
    
Undrar vad det var jag åstadkom spektakulärt blev
det i allafall.Det är väl skillnad på sammanbinder
respektive omsluter.Kul var det det j.... snyggt om
man slumpar en sådär 10 20 punkter.
Ha det
SvenSv: Utmaningar!
    
    
Jag gjorde nästan som du beskrev, först letade jag upp punkten som var längst åt vänster, om det finns mer än en på samma x-koordinat tas den som är längs ned. Sedan letar jag rätt på den punkt som ligger på lägsta vinkel från y-axeln, då kan det inte finnas någon punkt utanför, när jag sedan har kommit till startpunkten igen är cirkeln fullständig.
/Johan
PS. HIG = Högskolan i Gävle???Sv: Utmaningar!
    
    
ca 7500 studenter och jag skulle väl tro att en 1000 av dem studerar något som har med data/datorer att göra... Dom har ca 20 datasalar (kanske) med ungefär 20 datorer i varje... Så det är aldrig frågan om att boka dator 100 dagar för det att man måste ha den.
Här finns dessutom Creative media Lab, Ni har säkert sett en del reklamsnuttar på TV som gjorts av elever härifrån... Ketchup-reklamen exempelvis.... Då en ketchupflaska ritar på en tallrik... Ett fotbollsmål, eller så.. Jag tror även att Ballerina-kex reklamen är animerad av elever från denna kurs. Sv: Utmaningar!
    
    
Jag vill ju av naturliga själ bara göra lite reklam för HIG eftersom jag själv gått där..
Dataingenjörsprogrammet 120p
/peterhSv: Utmaningar!
    
    
<code>
Private Type Punkt
    x As Integer
    y As Integer
End Type
Dim SlumpPunkter(0 To 199) As Punkt
Dim Ring() As Punkt
Private Sub Form_Load()
    Dim tmp As Integer
    Dim LastVinkel As Double
    Dim TmpVinkel As Double
    Dim TmpVinkel2 As Double
    Dim Hittad As Boolean
    
    Randomize
    
    'slumpar ut punkter i en array, inga punkter skapas den sista tiondelen av formens hökd/bredd
    For tmp = 0 To UBound(SlumpPunkter)
        SlumpPunkter(tmp).x = Rnd * (ScaleWidth * 0.8) + ScaleWidth * 0.1
        SlumpPunkter(tmp).y = Rnd * (ScaleHeight * 0.8) + ScaleHeight * 0.1
    Next
    'ring är en array med koordinaterna till ytterramen
    ReDim Ring(0)
    
    'första punkten får kordinaten längst upp åt höger i formen
    Ring(0).x = ScaleWidth - 1
    Ring(0).y = 0
    'en punkt som befinner sig längst åt vänster letas upp
    For tmp = 0 To UBound(SlumpPunkter)
        If SlumpPunkter(tmp).x <= Ring(0).x Then
            Ring(0).x = SlumpPunkter(tmp).x
        End If
    Next
    'letar rätt på den punkten med högst y-koordinat av de som ligger längst åt vänster
    For tmp = 0 To UBound(SlumpPunkter)
        If SlumpPunkter(tmp).x = Ring(0).x Then
            If SlumpPunkter(tmp).y >= Ring(0).y Then
                Ring(0).y = SlumpPunkter(tmp).y
            End If
        End If
    Next
    
    'här beräknas ytterpunkterna fram, kan bli lite knivigt att beskriva i ord...
    LastVinkel = 0
    'loop som går tills den har kommit runt ett varv och hittat startpunkten
    While (Not (Ring(0).x = Ring(UBound(Ring)).x And Ring(0).y = Ring(UBound(Ring)).y)) Or UBound(Ring) = 0
        TmpVinkel = 360
        ReDim Preserve Ring(UBound(Ring) + 1)
        'loop letar igenom alla punkter efter den med lägst vinkel
        For tmp = 0 To UBound(SlumpPunkter)
            TmpVinkel2 = BerVinkel(Ring(UBound(Ring) - 1).x, Ring(UBound(Ring) - 1).y, SlumpPunkter(tmp).x, SlumpPunkter(tmp).y)
            If LastVinkel <= TmpVinkel2 And TmpVinkel2 < TmpVinkel Then
                'vinkeln som är så liten som möjligt men större än den senaste letas fram
                TmpVinkel = TmpVinkel2
                Ring(UBound(Ring)).x = SlumpPunkter(tmp).x
                Ring(UBound(Ring)).y = SlumpPunkter(tmp).y
            End If
        Next
        LastVinkel = TmpVinkel
    Wend
    'ritar ut "cirkeln"
    For tmp = 0 To UBound(Ring) - 1
        Line (Ring(tmp).x, Ring(tmp).y)-(Ring(tmp + 1).x, Ring(tmp + 1).y)
    Next
    
    'ritar ut alla punkter i rött
    For tmp = 0 To UBound(SlumpPunkter)
        Me.PSet (SlumpPunkter(tmp).x, SlumpPunkter(tmp).y), RGB(255, 0, 0)
    Next
End Sub
Function BerVinkel(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer) As Double
    'funktionen räknar ut vinkeln mellan två punkter i förhållande till y-axeln
    Const pi = 3.14159265358979
    Dim AvstX As Integer, AvstY As Integer, vinkel As Double
        
    AvstX = x2 - x1
    AvstY = y2 - y1
    If AvstX = 0 And AvstY = 0 Then
        'om det är samma vinkel returneras 360, då kommer punkten ignoreras
        vinkel = 360
    ElseIf AvstY = 0 Then
        If AvstX < 0 Then
            vinkel = 270
        Else
            vinkel = 90
        End If
    ElseIf AvstX = 0 Then
        If AvstY < 0 Then
            vinkel = 0
        Else
            vinkel = 180
        End If
    ElseIf AvstX > 0 Then
        If AvstY < 0 Then
            vinkel = Atn(-AvstX / AvstY) * 180 / pi
        Else
            vinkel = 90 + Atn(AvstY / AvstX) * 180 / pi
        End If
    Else
        If AvstY < 0 Then
            vinkel = 270 + Atn(AvstY / AvstX) * 180 / pi
        Else
            vinkel = 180 + Atn(-AvstX / AvstY) * 180 / pi
        End If
    End If
    
    BerVinkel = vinkel
End Function
</code>
/Johan