piv_streamlines — PIV visualise op

• Data kinds: flow2d → table

• Call: import fullseye as fs; fs.ledger.piv_streamlines(flow, seeds=None, separation=None, step=0.25, max_length=None, min_speed=0.001, test_ratio=0.5) (implementation को सीधे call करना हो तो import pivops; pivops.piv_streamlines(flow, seeds=None, separation=None, step=0.25, max_length=None, min_speed=0.001, test_ratio=0.5), registry से लेना हो तो opspiv.get("piv_streamlines"))

उपयोग

RK4 से streamline का पीछा करता है (MATLAB के stream2 / streamslice के समकक्ष)।

seeds छोड़ने पर seeds को Jobard–Lefer (1997) evenly spaced placement से अपने-आप रखा जाता है। Streamlines लगभग separation की दूरी पर चलती हैं और जहाँ वे test_ratio * separation से अधिक पास आती हैं वहाँ काट दी जाती हैं। Arrow plots घने होने पर गड्डमड्ड हो जाते हैं, और seeds को हाथ से रखने पर खाली जगहें रह जाती हैं, लेकिन यह placement न खाली जगहें बनाता है न overlap (नीचे के 2 गुण gates के रूप में उपयोग होते हैं)।

• अलग-अलग streamlines के sample points कभी test_ratio * separation से अधिक पास नहीं आते।

• min_speed या उससे अधिक गति वाला हर grid point किसी न किसी streamline से separation के भीतर होता है (कुछ भी छूटता नहीं)।

Coordinates flow grid पर हैं (row 0 ऊपर, (row, col))। दिशा field को गति से भाग दिया जाता है और arc length के अनुसार आगे बढ़ता है, इसलिए 1 step step grid इकाई है। Streamline के हर point के लिए गति अलग से लौटाई जाती है।

Args:

flow: (2, h, w) (dy, dx)।

seeds: shape (n, 2) का (row, col)। None उन्हें अपने-आप रखता है।

separation: streamlines के बीच की दूरी [grid]। None देने पर max(h, w) / 25 (कम से कम 2)।

step: RK4 का 1 step [grid]।

max_length: एक दिशा में अधिकतम लंबाई [grid]। None देने पर 4 * (h + w)।

min_speed: जहाँ गति इससे कम हो वहाँ रुकें (अधिकतम गति के सापेक्ष अनुपात)।

test_ratio: कट-ऑफ़ दूरी, separation के गुणक के रूप में (0 < x ≤ 1)।

Returns:

dict(table): paths ((m_i, 2) की list, upstream → downstream क्रम में),

speed (हर point पर गति की list), seeds, stop (कारण-युग्मों

(backward, forward) की list), n, separation, d_test, step,

stop_counts (हर कारण की गिनती)।

Raises:

ValueError: flow का shape / non-finite मान, सीमा से बाहर के parameters, grid से बाहर के seeds।

उपयोग की विस्तृत guide

• piv_displacement family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• piv_field_analysis_tour — py -3.11 examples/piv_field_analysis_tour.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

—

इसी category के (visualise)

piv_flow_to_rgbimage · piv_line_integral_convolution · piv_quiver · piv_streamline_image


*Provenance: pivops.py — PIV operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.