PageSourceSearch

https://docs-vrgeo-version3.netlify.app/assets/js/3dc1b8e1.3cc39ccb.js

js docs-vrgeo-version3.netlify.app collected 2026-10-03 10:42:54 UTC 15,460 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkvrgs_docs_v_3_1=globalThis.webpackChunkvrgs_docs_v_3_1||[]).push([[27514],{74130(e,t,n){n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"tutorial/tutorial-fractures/tf040-orientations-and-sets","title":"Orientations and fracture sets","description":"Turning fracture measurements into fracture sets \u2014 plotting them on the stereonet, contouring for real clusters, picking sets by hand or by k-means, and getting the numbers out.","source":"@site/docs/tutorial/tutorial-fractures/tf040-orientations-and-sets.md","sourceDirName":"tutorial/tutorial-fractures","slug":"/tutorial/tutorial-fractures/tf040-orientations-and-sets","permalink":"/docs/next/tutorial/tutorial-fractures/tf040-orientations-and-sets","draft":false,"unlisted":false,"editUrl":"https://github.com/vrgeoscience/vrgs_docs_v3/tree/master/docs/tutorial/tutorial-fractures/tf040-orientations-and-sets.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"sidebar_position":4,"description":"Turning fracture measurements into fracture sets \u2014 plotting them on the stereonet, contouring for real clusters, picking sets by hand or by k-means, and getting the numbers out.","keywords":["stereonet","fracture sets","contouring","Kamb","auto-cluster","k-means","Fisher"]},"sidebar":"docs","previous":{"title":"Fractures from photographs","permalink":"/docs/next/tutorial/tutorial-fractures/tf030-fractures-from-photographs"},"next":{"title":"Measuring fracture intensity","permalink":"/docs/next/tutorial/tutorial-fractures/tf050-intensity"}}');var r=n(74848),i=n(28453);const o={sidebar_position:4,description:"Turning fracture measurements into fracture sets \u2014 plotting them on the stereonet, contouring for real clusters, picking sets by hand or by k-means, and getting the numbers out.",keywords:["stereonet","fracture sets","contouring","Kamb","auto-cluster","k-means","Fisher"]},a="Orientations and fracture sets",h={},l=[{value:"Orientations from exposed faces",id:"orientations-from-exposed-faces",level:2},{value:"Get them on the stereonet",id:"get-them-on-the-stereonet",level:2},{value:"Splitting into sets",id:"splitting-into-sets",level:2},{value:"By hand, on the net",id:"by-hand-on-the-net",level:3},{value:"Automatically, by k-means",id:"automatically-by-k-means",level:3},{value:"Reading the set statistics",id:"reading-the-set-statistics",level:2},{value:"Getting the numbers out",id:"getting-the-numbers-out",level:2},{value:"See also",id:"see-also",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"orientations-and-fracture-sets",children:"Orientations and fracture sets"})}),"\n",(0,r.jsxs)(t.p,{children:["By now you have orientation measurements \u2014 typed in the field, digitised as\nplanes on the model, or estimated from traces \u2014 or you can extract them from the\nfaces the outcrop exposes, as the first section below describes. This page turns\nthat cloud of measurements into ",(0,r.jsx)(t.strong,{children:"fracture sets"}),": the two, three or four preferred\norientations that actually describe the outcrop."]}),"\n",(0,r.jsx)(t.p,{children:"Everything downstream keys off sets. One set becomes one fracture set in a DFN,\nwith its own mean orientation, dispersion, size distribution and intensity."}),"\n",(0,r.jsx)(t.h2,{id:"orientations-from-exposed-faces",children:"Orientations from exposed faces"}),"\n",(0,r.jsxs)(t.p,{children:["Where the rock has broken along its fractures, the fracture surfaces themselves are\nexposed as planar faces, and\n",(0,r.jsx)(t.a,{href:"/docs/next/plane-growing",children:"Grow Planar Patches"})," measures\nthem all in one run. Select the mesh, then ",(0,r.jsx)(t.strong,{children:"Extract \u2192 Grow Planar Patches"}),". The\ndialog measures the mesh and suggests its own parameters, and ",(0,r.jsx)(t.strong,{children:"Apply"})," divides the\nmesh into planar patches, each with a fitted plane."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Tick ",(0,r.jsx)(t.strong,{children:"Create Objects"})," to turn every patch into an orientation measurement. From\nthen on they behave like any others: they plot on the stereonet, and contour and\ncluster as described below. Each patch is one measurement however large it is, so\nraise ",(0,r.jsx)(t.strong,{children:"Minimum Area"})," to keep slivers out of the statistics."]}),"\n",(0,r.jsxs)(t.li,{children:["Set ",(0,r.jsx)(t.strong,{children:"Cluster into Sets"})," to the number of sets you expect, and the tool also\nsorts the patches into sets, weighted by area, with one group per set. Treat that\nas a first answer to check against the contoured net."]}),"\n",(0,r.jsxs)(t.li,{children:["To collect a single set, use the dialog's ",(0,r.jsx)(t.strong,{children:"Orientation Filter"}),": pick a set by\nnumber with ",(0,r.jsx)(t.strong,{children:"From Set"}),", or give a dip, an azimuth and an angle, and only the\npatches of that orientation are produced. See\n",(0,r.jsx)(t.a,{href:"/docs/next/plane-growing#extracting-one-fracture-set",children:"Extracting O
1ne Fracture Set"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Faces and traces see different fractures",type:"note",children:(0,r.jsxs)(t.p,{children:["A fracture shows as a face only where the rock has broken along it, which favours\nfractures at a low angle to the exposure; fractures at a high angle to it show as\ntraces instead. The sampling bias\n",(0,r.jsx)(t.a,{href:"/docs/next/tutorial/tutorial-fractures/tf010-overview#a-note-on-what-you-are-measuring",children:"described in the overview"}),"\ntherefore runs the other way for faces, so combine faces and traces rather than\nchoosing one."]})}),"\n",(0,r.jsx)(t.h2,{id:"get-them-on-the-stereonet",children:"Get them on the stereonet"}),"\n",(0,r.jsxs)(t.p,{children:["Open a ",(0,r.jsx)(t.strong,{children:"Stereonet Window"})," from ",(0,r.jsx)(t.strong,{children:"Home \u2192 Windows"}),". Your orientations plot as\npoles."]}),"\n",(0,r.jsxs)(t.p,{children:["The first thing to do is ",(0,r.jsx)(t.strong,{children:"contour"})," them, in the Properties panel under\n",(0,r.jsx)(t.strong,{children:"Contour Properties"}),". A scatter of poles will always look like it has clusters\nin it; contouring is what tells you whether they are real."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Method"}),(0,r.jsx)(t.th,{children:"Use it to ask"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Modified Kamb"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.em,{children:'"Is this cluster real?"'})," Contours are in ",(0,r.jsx)(t.strong,{children:"\u03c3"})," \u2014 standard deviations above a uniform distribution \u2014 so the contour value answers the question directly."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Schmidt (1%)"})}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.em,{children:'"How does this compare?"'})," A fixed 1%-area counting circle contoured in ",(0,r.jsx)(t.strong,{children:"% of data"})," \u2014 the classic method, comparable against published nets and against datasets of a different size."]})]})]})]}),"\n",(0,r.jsxs)(t.p,{children:["Start with ",(0,r.jsx)(t.strong,{children:"Modified Kamb"}),". Raise ",(0,r.jsx)(t.strong,{children:"Significance (\u03c3)"})," for broader, smoother\ncontours and lower it for tighter, more detailed ones; if a cluster only appears\nat low \u03c3, be suspicious of it."]}),"\n",(0,r.jsx)(t.admonition,{title:"Equal area, not equal angle",type:"note",children:(0,r.jsxs)(t.p,{children:["Density contouring assumes an equal-area (Schmidt) projection, which is the\ndefault. If you switch ",(0,r.jsx)(t.strong,{children:"Equal Area"})," off for an equal-angle (Wulff) net, the\ncontours are no longer a valid density estimate."]})}),"\n",(0,r.jsx)(t.h2,{id:"splitting-into-sets",children:"Splitting into sets"}),"\n",(0,r.jsx)(t.p,{children:"Two routes, and they are complementary rather than competing."}),"\n",(0,r.jsx)(t.h3,{id:"by-hand-on-the-net",children:"By hand, on the net"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Stereonet"})," ribbon tab has ",(0,r.jsx)(t.strong,{children:"Rectangle"}),", ",(0,r.jsx)(t.strong,{children:"Ellipse"}),", ",(0,r.jsx)(t.strong,{children:"Polygon"})," and\n",(0,r.jsx)(t.strong,{children:"Sector"})," selection tools. Draw round a cluster and the poles inside are\nselected \u2014 and because selection is shared across VRGS, they are simultaneously\nselected in the 3D view and in the trees."]}),"\n",(0,r.jsxs)(t.p,{children:["That last part is what makes hand-picking worth doing at least once. Select a\ncluster on the net, look at the model, and see ",(0,r.jsx)(t.em,{children:"where"})," those fractures are. If\nthe cluster turns out to be forty measurements off one small face, you have\nlearnt something the algorithm would not have told you. ",(0,r.jsx)(t.strong,{children:"Hide Unselected"})," on\nthe same panel makes this easier."]}),"\n",(0,r.jsxs)(t.p,{children:["Having selected a cluster, right-click in the tree \u2192 ",(0,r.jsx)(t.strong,{children:"Group"})," to make it a set."]}),"\n",(0,r.jsx)(t.h3,{id:"automatically-by-k-means",children:"Automatically, by k-means"}),"\n",(0,r.jsxs)(t.p,{children:["Select the orientation groups (or the loose measurements) in the tree, then\n",(0,r.jsx)(t.em,{children:"right + click"})," \u2192 ",(0,r.jsx)(t.strong,{children:"Auto-cluster Selected Orientations\u2026"}),"."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["You are asked for ",(0,r.jsx)(t.strong,{children:"k"}
1),", the number of clusters. The default is ",(0,r.jsx)(t.strong,{children:"3"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["It needs at least ",(0,r.jsx)(t.strong,{children:"6"})," measurements."]}),"\n",(0,r.jsxs)(t.li,{children:["Clustering is on ",(0,r.jsx)(t.strong,{children:"axial pole direction"}),", so a plane and its opposite pole\nare treated as the same orientation, which is what you want for fractures."]}),"\n",(0,r.jsxs)(t.li,{children:["A new parent group ",(0,r.jsx)(t.em,{children:'"Classified KMeans N Groups"'})," appears, holding one\n",(0,r.jsx)(t.em,{children:'"Cluster N (M measurements)"'})," group per set. ",(0,r.jsx)(t.strong,{children:"Your originals are not\nmodified"})," \u2014 the clusters are copies."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Because it is non-destructive, run it two or three times with different k and\ncompare against the contoured net. k-means will happily return four sets from a\npopulation that has two; the contours are what tell you it has overreached."}),"\n",(0,r.jsx)(t.admonition,{title:"Use both",type:"tip",children:(0,r.jsxs)(t.p,{children:["Contour first to decide ",(0,r.jsx)(t.em,{children:"how many"})," sets there are, then auto-cluster with that k\nto do the sorting. Picking k off the stereonet and letting k-means do the tedious\npart is faster than either alone, and it keeps the judgement where it belongs."]})}),"\n",(0,r.jsx)(t.h2,{id:"reading-the-set-statistics",children:"Reading the set statistics"}),"\n",(0,r.jsxs)(t.p,{children:["When you later run ",(0,r.jsx)(t.strong,{children:"Create DFN from Selected Groups"}),", VRGS shows a per-group\npreview before it commits to anything:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"  Cluster 1 (48 measurements): 48 measurements -> dip 82.4, az 137.1, K 24.6\n  Cluster 2 (31 measurements): 31 measurements -> dip 79.0, az 044.9, K 11.2\n"})}),"\n",(0,r.jsxs)(t.p,{children:["That is the ",(0,r.jsx)(t.strong,{children:"Fisher"})," summary \u2014 mean dip, mean azimuth, and ",(0,r.jsx)(t.strong,{children:"K"}),", the\nconcentration parameter. It is worth reading even if you never build a DFN,\nbecause it is the most compact honest description of a set you will get."]}),"\n",(0,r.jsxs)(t.p,{children:["As a rough reading of K: ",(0,r.jsx)(t.strong,{children:"1\u20135"})," is strongly dispersed, ",(0,r.jsx)(t.strong,{children:"10\u201320"})," is moderate\nclustering, and ",(0,r.jsx)(t.strong,{children:"50+"})," is a tight set. A group needs at least ",(0,r.jsx)(t.strong,{children:"3"})," measurements\nto have statistics computed at all; fewer and it is skipped."]}),"\n",(0,r.jsx)(t.p,{children:"If a cluster comes back down in the dispersed range, go back to the net. Usually\nit is either two sets that k-means merged into one, or a genuinely diffuse\npopulation \u2014 and the contours distinguish those."}),"\n",(0,r.jsx)(t.h2,{id:"getting-the-numbers-out",children:"Getting the numbers out"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Right-click the stereonet \u2192 Export"})," writes ",(0,r.jsx)(t.strong,{children:"SVG Document \u2192 Stereonet\nDiagram"})," (or ",(0,r.jsx)(t.strong,{children:"Rose Diagram"}),") at publication quality, or ",(0,r.jsx)(t.strong,{children:"Spreadsheet"})," for\nthe plotted orientations as a table."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Right-click any interpretation group \u2192 Spreadsheet"}),' gives a tabular view of\nevery measurement in it, which is usually faster than exporting when the\nquestion is just "what were those numbers?".']}),"\n",(0,r.jsxs)(t.li,{children:["For a figure that travels with its statistics, collect the net into an\n",(0,r.jsx)(t.a,{href:"/docs/next/general/viewing-collaboration/report-view",children:"analysis report"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"see-also",children:"See also"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/next/general/fractures-structure/stereonet-user-guide",children:"Stereonet User Guide"})," \u2014 the complete property sheet, the rose and dip plots, and the 3D stereosphere."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/next/plane-growing",children:"Grow Planar Patches"})," \u2014 extracting orientations from the planar faces of a mesh, and ",(0,r.jsx)(t.a,{href:"/docs/next/general/fractures-structure/plane-growing-method",children:"its method"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/docs/next/general/fractures-structure/dfn-interpretation-matching",children:"DFN: Matching Interpretations"})," \u2014 the mathematics behind the Fisher and k-means steps."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Next: ",(0,r.jsx)(t.a,{href:"/docs/next/tutorial/tutorial-fractures/tf050-intensity",children:"measuring fracture intensity"}),"."]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453(e,t,n){n.d(t,{R:()=>o,x:()=>a});var s=n(96540);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.