Tes statistik untuk pola garis spasial?


32

Ada banyak tes untuk pola titik spasial yang dapat digunakan untuk menentukan apakah poin didistribusikan secara acak atau tidak, tetapi apakah ada tes yang ditetapkan untuk pola garis spasial? (Saya berpikir garis lurus, hanya dengan titik awal dan akhir dan tidak ada node perantara.)

Data yang ingin saya analisis adalah garis OD (asal-tujuan) pergerakan manusia dan hewan. (Mirip dengan contoh di Clustering garis tidak berarah .)

Sejauh ini, satu ide adalah untuk memperlakukan garis seperti titik 4D dan menggunakan tes pola titik tapi saya tidak yakin apakah itu tepat.

Tes yang ideal akan memungkinkan untuk menentukan apakah ada kelompok garis atau tidak.

Secara naluriah, saya akan mengatakan bahwa banyak jalur yang dimulai dengan asal yang sama tetapi memiliki semua jenis tujuan yang berbeda, tidak boleh dianggap sebagai gugus. Di sisi lain, banyak garis yang menjalankan (dekat dengan) paralel untuk waktu yang lebih lama akan berupa sebuah cluster. masukkan deskripsi gambar di sini


Apa yang seharusnya menjadi perilaku Anda jika satu baris sejajar dengan baris lain tetapi 1) jauh lebih pendek dari baris pertama atau 2) "jauh" ke arah baris pertama
radouxju

@radouxju dalam kasus-kasus itu, saya akan mengatakan mereka tidak termasuk dalam kelompok yang sama
underdark

Jawaban:


17

Ini adalah pertanyaan yang sulit karena belum banyak, jika ada, statistik proses spasial yang dikembangkan untuk fitur garis. Tanpa secara serius menggali persamaan dan kode, statistik titik proses tidak dapat langsung diterapkan pada fitur linier dan dengan demikian, secara statistik tidak valid. Ini karena nol, yang diberikan pola yang diuji, didasarkan pada peristiwa titik dan bukan dependensi linier dalam bidang acak. Saya harus mengatakan bahwa saya bahkan tidak tahu apa yang akan menjadi nol sejauh intensitas dan pengaturan / orientasi akan lebih sulit.

Saya hanya meludah-balling di sini tetapi, saya bertanya-tanya apakah evaluasi multi-skala kepadatan garis ditambah dengan jarak Euclidean (atau jarak Hausdorff jika garis-garis kompleks) tidak akan menunjukkan ukuran pengelompokan yang berkelanjutan. Data ini kemudian dapat diringkas ke vektor garis, menggunakan varians untuk memperhitungkan perbedaan panjang (Thomas 2011), dan menetapkan nilai cluster menggunakan statistik seperti K-means. Saya tahu bahwa Anda tidak setelah cluster ditugaskan tetapi nilai cluster bisa mempartisi derajat clustering. Ini jelas akan membutuhkan kecocokan optimal k sehingga, cluster sewenang-wenang tidak ditugaskan. Saya berpikir bahwa ini akan menjadi pendekatan yang menarik dalam mengevaluasi struktur tepi dalam model teoritis grafik.

Ini adalah contoh yang berhasil di R, maaf, tapi ini lebih cepat dan lebih dapat diproduksi daripada memberikan contoh QGIS, dan lebih banyak di zona nyaman saya :)

Tambahkan pustaka dan gunakan objek psp tembaga dari spatstat sebagai contoh baris

library(spatstat)
library(raster)
library(spatialEco)

data(copper)
l <- copper$Lines
l <- rotate.psp(l, pi/2)

Hitung kerapatan garis pesanan 1 dan 2 yang distandarkan dan kemudian memaksa ke objek kelas raster

d1st <- density(l)
  d1st <- d1st / max(d1st)
  d1st <- raster(d1st)  
d2nd <- density(l, sigma = 2)
  d2nd <- d2nd / max(d2nd)
  d2nd <- raster(d2nd)  

Membakukan kepadatan urutan 1 dan 2 menjadi kepadatan terintegrasi skala

d <- d1st + d2nd
d <- d / cellStats(d, stat='max')  

Hitung jarak euclidean terbalik standar dan paksakan ke kelas raster

euclidean <- distmap(l)
euclidean <- euclidean / max(euclidean)
euclidean <- raster.invert(raster(euclidean))

Pindahkan spatstat psp ke objek sp SpatialLinesDataFrame untuk digunakan dalam raster :: extract

as.SpatialLines.psp <- local({
     ends2line <- function(x) Line(matrix(x, ncol=2, byrow=TRUE))
     munch <- function(z) { Lines(ends2line(as.numeric(z[1:4])), ID=z[5]) }
     convert <- function(x) {
        ends <- as.data.frame(x)[,1:4]
        ends[,5] <- row.names(ends)
        y <- apply(ends, 1, munch)
        SpatialLines(y)
     }
     convert
})
l <- as.SpatialLines.psp(l)
l <- SpatialLinesDataFrame(l, data.frame(ID=1:length(l)) )

Plot hasil

par(mfrow=c(2,2))
  plot(d1st, main="1st order line density")
    plot(l, add=TRUE)
  plot(d2nd, main="2nd order line density")
    plot(l, add=TRUE) 
  plot(d, main="integrated line density")
    plot(l, add=TRUE)   
  plot(euclidean, main="euclidean distance")
    plot(l, add=TRUE) 

Ekstrak nilai raster dan hitung statistik ringkasan yang terkait dengan setiap baris

l.dist <- extract(euclidean, l)
l.den <- extract(d, l)
l.stats <- data.frame(min.dist = unlist(lapply(l.dist, min)),
                      med.dist = unlist(lapply(l.dist, median)),
                      max.dist = unlist(lapply(l.dist, max)),
                      var.dist = unlist(lapply(l.dist, var)),
                      min.den = unlist(lapply(l.den, min)),
                      med.den = unlist(lapply(l.den, median)),
                      max.den = unlist(lapply(l.den, max)),
                      var.den = unlist(lapply(l.den, var)))

Gunakan nilai siluet kluster untuk mengevaluasi k (jumlah cluster) yang optimal, dengan fungsi optimal.k, lalu tetapkan nilai kluster ke baris. Kami kemudian dapat menetapkan warna untuk setiap cluster dan plot di atas raster kepadatan.

clust <- optimal.k(scale(l.stats), nk = 10, plot = TRUE)                      
  l@data <- data.frame(l@data, cluster = clust$clustering) 

kcol <- ifelse(clust$clustering == 1, "red", "blue")
plot(d)
  plot(l, col=kcol, add=TRUE)

Pada titik ini orang dapat melakukan pengacakan garis untuk menguji apakah intensitas dan jarak yang dihasilkan signifikan dari acak. Anda bisa menggunakan fungsi "rshift.psp" untuk mengubah orientasi garis Anda secara acak. Anda juga bisa mengacak titik awal dan berhenti serta membuat ulang setiap baris.

Orang juga bertanya-tanya "bagaimana jika" Anda baru saja melakukan analisis pola titik menggunakan statistik analisis univariat atau lintas pada titik awal dan berhenti, tidak berbeda dengan garis. Dalam analisis univariat, Anda akan membandingkan hasil titik awal dan berhenti untuk melihat apakah ada konsistensi dalam pengelompokan antara dua pola titik. Ini bisa dilakukan melalui f-hat, G-hat, atau Ripley's-K-hat (untuk proses titik yang tidak ditandai). Pendekatan lain adalah analisis Cross (mis., Cross-K) di mana dua titik proses diuji secara bersamaan dengan menandainya sebagai [mulai, berhenti]. Ini akan menunjukkan hubungan jarak dalam proses pengelompokan antara titik awal dan berhenti. Namun, ketergantungan spasial (nonstesiaritas) pada proses intensitas yang mendasarinya dapat menjadi masalah dalam model-model ini yang membuatnya tidak homogen dan memerlukan model yang berbeda. Ironisnya, proses tidak homogen dimodelkan menggunakan fungsi intensitas yang, membawa kita lingkaran penuh kembali ke kepadatan sehingga, mendukung gagasan menggunakan kerapatan terintegrasi skala sebagai ukuran pengelompokan.

Berikut adalah contoh kerja cepat jika statistik Ripleys K (Besags L) untuk autokorelasi dari proses titik yang tidak ditandai menggunakan awal, hentikan lokasi kelas fitur garis. Model terakhir adalah cross-k menggunakan lokasi mulai dan berhenti sebagai proses yang ditandai nominal.

library(spatstat)
  data(copper)
  l <- copper$Lines
  l <- rotate.psp(l, pi/2)

Lr <- function (...) {
 K <- Kest(...)
  nama <- colnames(K)
   K <- K[, !(nama %in% c("rip", "ls"))]
   L <- eval.fv(sqrt(K/pi)-bw)
  L <- rebadge.fv(L, substitute(L(r), NULL), "L")
 return(L)
}

### Ripley's K ( Besag L(r) ) for start locations
start <- endpoints.psp(l, which="first")
marks(start) <- factor("start")
W <- start$window
area <- area.owin(W)
lambda <- start$n / area
 ripley <- min(diff(W$xrange), diff(W$yrange))/4
   rlarge <- sqrt(1000/(pi * lambda))
     rmax <- min(rlarge, ripley)
( Lenv <- plot( envelope(start, fun="Lr", r=seq(0, rmax, by=1), nsim=199, nrank=5) ) )

### Ripley's K ( Besag L(r) ) for end locations
stop <- endpoints.psp(l, which="second")
  marks(stop) <- factor("stop")
W <- stop$window
area <- area.owin(W)
lambda <- stop$n / area
 ripley <- min(diff(W$xrange), diff(W$yrange))/4
   rlarge <- sqrt(1000/(pi * lambda))
     rmax <- min(rlarge, ripley)
( Lenv <- plot( envelope(start, fun="Lr", r=seq(0, rmax, by=1), nsim=199, nrank=5) ) )

### Ripley's Cross-K ( Besag L(r) ) for start/stop
sdata.ppp <- superimpose(start, stop)
( Lenv <- plot(envelope(sdata.ppp, fun="Kcross", r=bw, i="start", j="stop", nsim=199,nrank=5, 
                 transform=expression(sqrt(./pi)-bw), global=TRUE) ) )

Referensi

Thomas JCR (2011) Algoritma Clustering Baru Berdasarkan K-Means Menggunakan Segmen Garis sebagai Prototipe. Dalam: San Martin C., Kim SW. (eds) Kemajuan dalam Pengenalan Pola, Analisis Gambar, Visi Komputer, dan Aplikasi. CIARP 2011. Catatan Kuliah dalam Ilmu Komputer, vol 7042. Springer, Berlin, Heidelberg


14

Anda mungkin ingin melihat jarak Fréchet . Saya baru-baru ini mengetahui tentang ini setelah pertanyaan baru-baru ini mencari implementasi python.

Ini adalah metrik untuk menemukan kesamaan spasial dari linestrings . Ini ide yang mirip dengan jarak Hausdorff, yang setara untuk ukuran kesamaan poligon, tetapi untuk linestrings dengan arah.

Jarak Fréchet didefinisikan sebagai panjang minimal tali yang menghubungkan anjing pada satu lintasan dengan pemiliknya pada lintasan kedua, keduanya tidak pernah bergerak mundur

Metrik ini akan memiliki nilai kecil untuk dua kurva yang lokasinya dekat, hampir paralel, sejajar dengan cara yang sama, dan dengan panjang yang sama.

Itu tidak menjawab bagian identifikasi cluster.

Ada presentasi komprehensif di sini . Situasi Anda terdengar seperti beberapa kasus penggunaan yang disebutkan di bagian 46-49

Metrik ini memiliki banyak penggunaan non-geospasial seperti

  • mendeteksi subpola umum dalam sekuensing gen
  • pengenalan tulisan tangan
  • mendeteksi periode yang berkorelasi dalam deret waktu seperti sejarah harga saham

jadi sementara banyak makalah dalam bibliografi membahas topik ini, kebanyakan dari mereka tidak bersifat geospasial. Juga sebagian besar makalah ini datang di bawah algoritmik / matematika / ilmu komputer daripada geospasial / geosains dan ditujukan sesuai.

Namun makalah ini tampak menjanjikan: -

Buchin, K., Buchin, M., dan Wang, Y. (2009). Algoritma yang tepat untuk pencocokan kurva parsial melalui jarak Fréchet. Dalam Prosiding Simposium ACM-SIAM ke-20 tentang Algoritma Diskrit, halaman 645-654

Beberapa makalah lain terdengar lebih dekat dalam maksud untuk apa yang Anda cari - identifikasi cluster dan alokasi lintasan untuk cluster - tetapi mereka diilustrasikan menggunakan data deret waktu atau contoh non-geospasial lainnya. Namun mereka mungkin menunjuk ke arah yang menarik.


2
Saya akan berpikir cluster-linkage (atau DBSCAN) minimum menggunakan jarak Frechet atau Hausdorff, bukan jarak Euclidean, akan menjadi solusi yang bagus.
dbaston

Saya suka bahwa jarak Frechet ada dan saya juga suka bahwa presentasi membandingkan "jellybeans" dan "bellybuttons".
Fezter

5

Saya menyarankan untuk menggunakan pendekatan yang mirip dengan yang dijelaskan di sini .

ALGORITMA dan penamaan:

a) NODES lapisan nama baris. Hitung bantalan

b) secara spasial bergabung dengan dirinya sendiri (satu ke banyak) menggunakan toleransi jarak. Lapisan nama LINK

c) hapus dari LINKS bergabung dengan dirinya sendiri, yaitu NAME = NAME_1

d) di dalam LINK menemukan pasangan arah yang "sama". Saya menggunakan:

def theSame(aList,tol):
    maxB=max(aList);minB=min(aList)
    if abs(maxB-minB)<tol:return 1
    if abs(maxB-minB-180)<tol:return 1
    return 0
#-----------
theSame( [!BEARING!, !BEARING_1!],15)

yaitu garis yang diasumsikan bergerak berlawanan arah menjadi serupa dalam hal arah

d) menghapus pasangan yang tidak mirip (0) dari LINK.

e) menghitung grup LINK yang terhubung melalui NODES dan mentransfer nomor grup ke tabel NODES:

masukkan deskripsi gambar di sini

Sayangnya:

masukkan deskripsi gambar di sini

Namun statistik bantalan sederhana dalam grup, mis. Standar deviasi:

abs(tan(bearing))

tidak menunjukkan penyimpangan dalam kasus pertama dan yang sangat besar dalam kasus kedua. Demikian pula statistik panjang dapat membantu dengan 'berjalan secara paralel untuk waktu yang lama'.

Jika di atas menarik, saya dapat memperbarui jawaban dengan skrip yang menghitung grup tautan yang terhubung. Itu menggunakan modul arcpy dan networkx.

Tidak tahu cara memperlakukan sepasang garis dari titik yang sama di arah yang berlawanan ...


Saya tertarik melihat skripnya.
alphabetasoup

1
@ RichardLaw ikuti tautan di baris pertama solusi saya dan gulir ke bawah untuk melihatnya. Saya memiliki versi yang sedikit lebih baik, tetapi ini akan berhasil. Logika sangat sederhana: 1.membuat grafik menggunakan tautan dan simpul yang melekat padanya 2. Ambil simpul pertama dan temukan leluhur (grup 0) 3) hapus simpul dari grafik dan ulangi sampai tidak ada simpul yang tersisa. Saya menggunakannya berulang kali untuk menemukan grup pipa yang terputus (aliran dan apa pun) dll untuk dataset Dewan / LINZ yang berkualitas tinggi
FelixIP

5

Ada di mata saya masalah dengan definisi garis, yang akan menentukan pendekatan apa yang digunakan (beberapa dari yang disebutkan di atas). Jika ini adalah pasangan OD, dan geometri tidak berperan, saya akan mendekati ini berdasarkan pengelompokan jaringan. Anda mengatakan jaringan tidak membentuk jaringan - jadi, tetapi kemungkinan asal dan tujuan jatuh ke wilayah yang bermakna, dan dengan demikian Anda dapat memperlakukannya sebagai jaringan.

Jika geometri memiliki sesuatu untuk dikatakan (ini adalah, katakan lintasan GPS dan Anda ingin mempertimbangkan geometri), maka Anda harus benar-benar bekerja dalam ruang (x, y, t) - geometri yang mirip dengan jejak gerakan tetapi pada waktu mungkin tidak dievaluasi sama - ini tidak ditentukan dalam pertanyaan.

Beberapa kemungkinan yang dapat Anda lihat:

  1. Yang paling dekat dengan kebutuhan Anda adalah Dodge, Weibel, Forootan (2009), di sini http://orca.cf.ac.uk/94865/1/PhysicsMovement.pdf
  2. Jika geometri dapat disederhanakan, mungkin parameter yang disebutkan di sini dapat digunakan: http://www.tandfonline.com/doi/full/10.1080/17445647.2017.1313788

Tetapi akhirnya, membaca lagi pertanyaan awal Anda, bisa jadi lebih sederhana: dapatkah Anda menghitung secara berpasangan (antara segmen) jarak antara persimpangan ekstensi linier segmen dan titik terdekatnya, menjadi normal kembali (mungkin berdasarkan panjangnya) dari segmen itu sendiri) dan menggunakan algoritma pengelompokan matriks? Penalaran: segmen yang berpotongan jauh lebih mirip (paralel) daripada yang berpotongan dekat. Dalam gambar, Anda tidak mengatakan bagaimana memperlakukan segmen co-linear, atau paralel yang berada dalam offset (long frechet dist). Saya berasumsi bahwa ini akan memberikan masalah pada solusi di atas. (diedit untuk kejelasan, dengan secara eksplisit menyatakan "ekstensi linear" di atas)

Catatan (Jan 2018): Saya baru-baru ini menemukan ini:

  1. Cai, Yuhan, dan Raymond Ng. "Mengindeks lintasan spatio-temporal dengan polinomial Chebyshev." Prosiding konferensi internasional ACM SIGMOD 2004 tentang Pengelolaan data. ACM, 2004.

Yang berhubungan dengan kesamaan lintasan dan dengan demikian akan memungkinkan kuantifikasi kesamaan sampai batas tertentu. Ini didasarkan pada perkiraan polinomial kurva dan menghitung jarak Chebyshev.


4

Bisakah Anda memberikan sedikit lebih banyak detail pada jenis data yang Anda kerjakan? Apakah ini hanya serangkaian garis terputus-putus atau apakah mereka membentuk jaringan? Sudahkah Anda menggunakan alat ArcGIS untuk analisis pola spasial? Banyak metode ArcGIS (Ripley's K, NN index, Morans I) hanya menggunakan centroid dari garis / poligon ketika digunakan pada data non-point. Namun di sini Anda mungkin perlu mempertimbangkan untuk memisahkan setiap baris menjadi bagian yang sama untuk menghindari garis yang sangat panjang yang tidak dipertimbangkan karena centroid mereka berada sangat jauh.

Hal lain yang perlu dipikirkan adalah, secara konseptual apa itu kumpulan garis? Anda mungkin memiliki banyak garis yang berasal berdekatan satu sama lain, tetapi kemudian titik akhir mereka dapat tersebar. Demikian pula, Anda mungkin mendapatkan banyak garis yang dimulai dan berakhir sangat dekat satu sama lain, tetapi kemudian menjadi sangat tersebar di antara titik awal / akhir.

Namun satu pendekatan bisa dengan hanya melakukan analisis kerapatan garis sehingga daerah dengan lebih banyak garis (yang dapat dianggap berkerumun dalam arti tertentu) akan memiliki nilai grid tinggi, sementara daerah dengan kerapatan rendah akan memiliki nilai rendah. Jadi, Anda mendapatkan sedikit output hot-spot; namun ini tidak memberi Anda statistik tunggal seperti Morans I atau NNI. Itu juga tidak akan membedakan antara kepadatan sebagai hasil dari satu garis yang sangat tidak teratur (yaitu spiral yang ketat) vs banyak garis.

Maaf ini bukan jawaban lengkap untuk masalah Anda, tetapi saya pikir memakukan konsep lengkap tentang apa yang Anda coba capai dapat memberikan beberapa solusi yang lebih baik.

MEMPERBARUI

Berdasarkan contoh yang Anda berikan, saya pikir saran FelixlP untuk membuat titik dengan atribut garis bantalan untuk digunakan dengan langkah-langkah pola titik mungkin adalah cara yang baik untuk pergi. Kecuali saya akan membagi poin menjadi segmen yang sama dan memiliki titik dengan bantalan garis di setiap garis simpul. Maka Anda perlu melihat langkah-langkah yang akan melihat kedekatan setiap titik dan kesamaan antara bantalan (sehingga Anda mendeteksi garis yang lebih dekat ke tegak lurus).

Jadi menggunakan Getis-Ord GI (analisis Hotspot) akan menjadi alat yang baik untuk memvisualisasikan di mana cluster berada; dan kemudian Moran global I untuk menilai tingkat global clustering.

Jarak di mana Anda akan mengelompokkan garis, akan mempengaruhi derajat pengelompokan yang ditemukan. Jika Anda mencari kelompok pada skala 1 km maka Anda perlu mengelompokkan garis-garis tersebut menjadi sekitar itu. Demikian pula jika Anda mencari cluster pada skala 100m, Anda perlu mengelompokkan garis-garis tersebut. Ini agar Anda tidak ketinggalan garis dan juga agar Anda tidak mendeteksi setiap baris sebagai sebuah cluster.


Garis mewakili asal dan tujuan perjalanan. Mereka tidak membentuk jaringan. Saya telah menggunakan metode R untuk pola titik spasial titik asal dan tujuan sejauh ini. Saya tidak terlalu menyukai gagasan menggunakan centroid garis tetapi mungkin patut dicoba untuk memadatkan garis dan menganalisis node yang dihasilkan, terima kasih!
underdark

Analisis kerapatan garis mungkin merupakan solusi mundur jika saya tidak dapat menemukan yang lebih cocok.
underdark

Apakah buffering garis utama jarak tertentu kemudian meminta baris yang tidak sepenuhnya tertutup oleh buffer menjadi solusi? Saya telah melakukan banyak hal di masa lalu untuk menemukan rute perjalanan yang paling memungkinkan, tetapi data terdiri dari multi-simpul polyline daripada segmen garis sederhana.
jbgramm

@ jbgramm Saya bisa memikirkan banyak pendekatan yang akan menghitung sesuatu tapi saya bukan ahli statistik dan karena itu saya mencari metode yang mapan - jika ada
underdark

2
Menggunakan titik pusat garis, atau simpul, untuk mewakili proses titik bukanlah pendekatan yang valid secara statistik. Selain itu, Anda juga mengubah representasi proses spasial secara mendalam. Saya akan memposting beberapa rekomendasi tapi jujur, satu-satunya yang telah memberikan pendekatan yang agak valid adalah saran @underdark dari kepadatan garis. Dalam skala, ditambah dengan statistik autokorelasi akan menunjukkan tingkat pengelompokan dalam fitur linear.
Jeffrey Evans

3

Terima kasih atas contohnya.

Saya belum melihat metode yang ditetapkan untuk menghitung apa yang Anda cari, namun ini akan menjadi pendekatan saya. Ini semacam solusi kekerasan.

Hitung persegi panjang batas minimum, lalu perluas dengan sembarang, tetapi jumlah yang sama besar di masing-masing dari empat sudut.

Temukan pusat massa persegi panjang buat, hitung distribusi azimut dan jarak untuk titik OD untuk setiap baris, dan lakukan hal yang sama menggunakan sudut-sudut persegi panjang Anda yang terikat, bersama dengan membandingkan azimuth dari garis.

Tes untuk paralelisme dari masing-masing dari empat sudut ke ujung setiap sinar. Uji paralelisme dari pusat massa ke ujung setiap sinar.

Dengan melakukan ini, Anda dapat membandingkan penyimpangan dari sudut ke ujung. Dalam contoh (a) Anda akan memiliki garis sejajar dekat dari dua sudut ke masing-masing dari tiga kelompok garis. Anda juga akan memiliki garis sejajar dekat dari pusat massa ke ujung ujung garis.

Contoh (b) Anda tidak akan memiliki garis paralel dekat ketika menghitung dari sudut ke ujung setiap baris, tetapi garis-garis tersebut tidak tampak acak, mereka mengarah satu sama lain dengan sedikit penyimpangan.

Contoh (c) tampaknya acak

Contoh (d) tidak acak, radial.

Dalam melihat ini lebih lanjut, saya akan menjalankan tes yang saya jelaskan di atas, serta membuat tes solusi segitiga dari sudut-sudut persegi panjang yang dibuat melingkupi ke ujung sinar. Sudut interior yang serupa, dan area akan membantu memverifikasi pengelompokan kecuali salah satu garis dalam klaster secara signifikan lebih pendek daripada yang lain.

Di atas hanyalah satu pendapat bodoh, dan saya mungkin salah.


-1

Mengikuti deskripsi naluriah Anda, apa kriteria untuk 2 baris menjadi paralel?

Anda pada dasarnya dapat melakukan tes pada mereka mulai atau titik akhir:
Biarkan Sx = (start_x_line_1 - start_x_line_2),
Sy = (start_y_line_1 - start_y_line_2),
dan Ex, Ey sama tetapi untuk titik akhir mereka.

Jadi jika sqrt (Sx² + Sy²) DAN sqrt (Ex² + Ey²) berada di bawah ambang tertentu, Anda dapat mempertimbangkan garis-garis ini sebagai paralel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.