Mathematica, 166137 bayt
l:={i,j};s=Sign;f[p_,q_,h_,w_]:=Grid@Table[(1-Max[s[p-l]s[q-l],0])Boole[Abs@Mean[s@Det@{p-l+#,p-q}&/@Tuples[.5{1,-1},2]]<.6],{i,h},{j,w}]
Daha okunabilir versiyon:
l := {i, j}; s = Sign;
f[p_, q_, h_, w_] :=
Grid@Table[(1 - Max[s[p - l] s[q - l], 0]) Boole[
Abs@Mean[
s@Det@{p - l + #, p - q} & /@
Tuples[.5 {1, -1}, 2]] < .6], {i, h}, {j, w}]
Bu, adlı bir işlevi tanımlar f. Girdi ve çıktı özelliklerini oldukça liberal olarak yorumladım. İşlev fformatta girdi alır f[{x0, y0}, {x1, y1}, height, width]ve ızgara sol üst köşeden başlayarak 1 dizine eklenir. Çıktılar

çizgi 1s olarak ve arka plan 0s olarak görüntülenir (burada için gösterilmiştir f[{2, 6}, {4, 2}, 5, 7]). Bir Mathematica matrisi dönüm görevi 1s ve 0bir dizeye s #s ve .ben sadece standart yöntemi kullanmak böylece, daha önce birçok zorluklar içinde golfed olmuştur gösterdi, fakat bunu İlginç bir şey ekler sanmıyorum.
Açıklama:
Genel fikir, çizgi bir pikselden geçerse, pikselin dört köşesinden en az birinin çizginin üstünde ve en az birinin altında olmasıdır. Vektörler ( {x0,y0}köşeden) ve ( {x0,y0}- {x1,y1}) arasındaki açıyı inceleyerek bir köşenin çizginin üstünde mi yoksa altında mı olduğunu kontrol ederiz : bu açı pozitifse, köşe yukarıdadır ve açı negatifse köşe aşağıdadır.
İki vektörleri varsa {a1,b1}ve {a2,b2}aralarındaki açı matrisinin belirleyici işareti bularak pozitif veya negatif olması durumunda kontrol edebilmemiz {{a1,b1},{a2,b2}}. (Bunu yapmak için kullandığım eski yöntem, karmaşık sayıların aritmetiğini kullandı, bu da çok ... karmaşıktı.)
Bunun kodda çalışma şekli şöyledir:
{p-l+#,p-q}&/@Tuples[.5{1,-1},2]dört vektörleri alır {x0,y0}ve pikselin, dört köşe ile ( l:={i,j}daha önce tanımlanan piksel koordinatları), ve aynı zamanda arasında vektör {x0,y0}ve {x1,y1}.
s@Det@...çizgi ile dört köşe arasındaki açıların işaretlerini bulur (kullanarak s=Sign). Bunlar -1, 0 veya 1'e eşit olacaktır.
Abs@Mean[...]<.6bazı açıların pozitif, bazıları negatif olduğunu kontrol eder. Bu özelliğe sahip işaretlerin 4 tuplesinin hepsi -0.5 ile 0.5 (dahil) arasında araçlara sahiptir, bu nedenle <yerine bir bayt kaydetmek için 0.6 ile karşılaştırırız <=.
Hala bir sorun var: Bu kod, hattın her iki yönde de sonsuza kadar uzandığını varsayar. Bu nedenle , çizgiyi, çizginin uç noktaları ile tanımlanan dikdörtgenin içinde ve dışında 1-Max[s[p-l]s[q-l],0]bulunan çarpma (deneme yanılma yoluyla bulunur) 1ile kırpmamız 0gerekir.

Kodun geri kalanı bu piksellerin bir ızgarasını yapar.
(Bonus olarak, burada 181 bayt için tamamen farklı bir yöntemle daha önceki bir girişim :)
Quiet@Grid@Table[(1-Max[Sign[{i,j}-#3]Sign[{i,j}-#4],0])Boole[#3==#4=={i,j}||2Abs@Tr[Cross@@Thread@{{i,j},#3,#4}]/Norm[d=#3-#4]<2^.5Cos@Abs[Pi/4-Mod[ArcTan@@d,Pi/2]]],{i,#},{j,#2}]&