ბრეზენჰემის ალგორითმი: განსხვავება გადახედვებს შორის

[შეუმოწმებელი ვერსია][შეუმოწმებელი ვერსია]
შიგთავსი ამოიშალა შიგთავსი დაემატა
No edit summary
No edit summary
ხაზი 1:
'''ბრეზენჰამის სეგმენტის აგების ალგორითმი''' არის [[ჯეკ ე. ბრეზენჰამი|ბრეზენჰამის]] მიერ ჩამოყალიბებული [[ალგორითმი]] 1962 წელს, მაშინ როცა ის მუშაობდა [[IBM]]-ის ინფორმატიკის ლაბორატორიაში და ცდილობდა მოეძებნა მეთოდი რომლითაც შეძლებდა ტექსტის კურსორის მართვას. ეს ალგორითმი წარმოდგენილი იყო [[1963]] წლის [[Association for Computing Machinery|ACM]]-ის კონვენციაზე. შემდეგ კი გამოქვეყნდა 1965 წლის ჟურნალ ''IBM Systems Journal''.
ალგორითმი განსაზღვრავს დასახული გეგმის პუნქტებს, რომლებიც უნდა დაიხაზოს რათა შეადგინოს სეგმენტის მარჯვენა ნაწილის მიახლოება მოცემულ ორ პუნქტს შორის. ეს ალგორითმი ხშირად გამოიყენება კომპიუტერის ეკრანის მარჯვენა მხარეზე სურათის ხაზის გასავლებად ან გამოსახულების დასახატადასაგებად. ის განიხილება როგორც ერთ-ერთი პირველად აღმოჩენილი ალგორითმი [[გამოსახულების სინთეზი]]-ს სფეროში.
 
==გამოყენება==
ხაზი 92:
 
 
თუმცა ''e''-ს გაორმაგება(და მისი ნაზრდების მნიშვნელობებისა),არ ცვლის არაფერს მისი ნიშნის ტესტირებაში: ''e'' წარმოადგენს მანძილს მარჯვენა ზუსტ ორდინატიასდმი, რომელიც გაზრდილია 0,5-ით, ეს მანძილი გაზრილი იქნა რა მუდმივი დადებითი ფაქტორით 2×''dy'' (რომელიც არ ცვლის ტესტირებული შეცდომის მნიშვნელობას). დახრის მნიშვნელობა, რომელიც გამოიყენება როგორც ''e''-ს ნაზრდი გაზრდილი აგრეთვე იგივე ფაქტორით გახდება 2×''dy'', მისი საწყისი მნიშვნელობა კი -''dx'', მეორე პირობითი კლებადიდეკრემენტი გახდება 2×''dx''(რომელიც შეიძლება წინასწარ გამოვთვალოთ). ალგორითმი კი გახდება შემდეგნაირი:
 
'''procédure''' tracerSegment('''entier''' ''x''<sub>1</sub>, '''entier''' ''y''<sub>1</sub>, '''entier''' ''x''<sub>2</sub>, '''entier''' ''y''<sub>2</sub>) '''est'''
ხაზი 111:
'''fin si''' ;
'''fin pour''' ;
'''fin procédure''' ;
 
== ცვლადი სიდიდეების შემცირება და გამარტივება ==
 
საბოლოოდ შესაძლებელია ''e''-ს ნიშნის შეცვლა მისი მოპირდაპირე ნიშნის ტესტირებით, შემდეგ ცვალებადი სიდიდეების რაოდენობის შემცირებით, იმის კონსტატირებით რომ ზემოთ ნახსენები ''dx'' და ''dy'' აღარ გამოიყენება, როგორც კი თავდაპირველი შეცდომა და ნაზრდი გამოთვლილი არიან; საკმარისია აგრეთვე ნაზრდის და დეკრემენტის ნიშნის შეცვლა:
 
'''procédure''' tracerSegment('''entier''' ''x''<sub>1</sub>, '''entier''' ''y''<sub>1</sub>, '''entier''' ''x''<sub>2</sub>, '''entier''' ''y''<sub>2</sub>) '''est'''
'''déclarer''' '''entier''' ''dx'', ''dy'' ;
'''déclarer''' '''entier''' ''e'' ; ''// შეცდომის მნიშვნელობა''
''dy'' ← ( ''y''<sub>2</sub> - ''y''<sub>1</sub>) × 2 ; ''// e<sub>(1,0)</sub>''
''dx'' ← (''e'' ← ''x''<sub>2</sub> - ''x''<sub>1</sub>) × 2 ; ''// -e<sub>(0,1)</sub>''
'''tant que''' ''x''<sub>1</sub> &lt; ''x''<sub>2</sub> '''faire'''
tracerPixel(''x''<sub>1</sub>, ''y''<sub>1</sub>) ;
''x''<sub>1</sub> ← ''x''<sub>1</sub> + 1 ; ''// მომდევნო პიქსელების კოლონა''
'''si''' (''e'' ← ''e'' - ''dy'') ≤ 0 '''alors''' ''// იმავე რიგის მომდევნო პიქსელის მცდარი მნიშვნელობა''
''y''<sub>1</sub> ← ''y''<sub>1</sub> + 1 ; ''// სასურველია უფრო მაღალი რიგის მომდევნო პიქსელი ამორჩევა''
''e'' ← ''e'' + ''dx'' ; ''// აზუსტებს დაჩვებულ შეცდომას ახალ სტრიქონში''
'''fin si''' ;
'''fin faire''' ;
''// Le pixel final (x<sub>1</sub>, y<sub>1</sub>) n’est '''pas''' tracé.''
'''fin procédure''' ;