Reputation: 19
I was hoping to get some help here. I'm a geologist so my math background isn't as strong as it should be. I have a geological fault that I've digitized in a CAD program. I've placed three representative points on the fault plane and extracted those coordinate points. I've found the unit vector of that plane using the following code:
p1 = np.array([503562, 2811504, 1771], dtype='float64')
p2 = np.array([504122, 2810766, 1820], dtype='float64')
p3 = np.array([504325, 2811311, 1042], dtype='float64')
# Calculate vectors
v1 = p3 - p1
v2 = p2 - p1
# Find the cross product (vector normal to the plane)
cp = np.cross(v1, v2)
# Assign to a, b and c for components of plane equation
a, b, c = cp
# Calculate d component with a dot product and the following equation:
# a*x3 + b*y3 + c*z3 = d
d = np.dot(cp, p3)
# Find the unit vector
uv = cp / (cp**2).sum()**0.5
This vector represents a plane which is my maximum direction of continuity (a geological term). I need to get the two planes which are at 90 degree angles to the plane defined above. I know this is probably quite simple in terms of linear algebra but I'm at a loss right now. I eventually need this to get the strike and dip of the three planes of continuity defined above.
Edit: added a picture for clarity
The blue feature is a fault. The green rugby ball is my search ellipse. I need to figure out the planes which are defined by that shape. I used those green points digitized on the fault to calculate the first plane. I don't know how to get the other two
Upvotes: 1
Views: 747
Reputation: 1124
From your description, this is what I believe you want:
For the strike, you want the intersection of your plane and a horizontal plane (so cross product of your unit vector and a (0,0,1) vector.
For the dip, you want the cross product of your plane's unit vector and the strike's unit vector.
I agree with other commenters - maybe sort out the math on your own... then you can come to stackoverflow if you have problems implementing it in Python :)
Upvotes: 2
Reputation: 15249
So assuming you are happy with any such planes:
You already have cp
defining your "continuity plane".
ortho1 = np.cross(v1, cp)
will give you one orthogonal direction to cp
i.e one of your possible requested planes.
Then ortho2 = np.cross(cp, ortho1)
will give you the second corresponding one.
Upvotes: 3