Evaluate surface normals.
(self, u: Array, v: Array)
| 307 | ) |
| 308 | |
| 309 | def normal(self, u: Array, v: Array) -> Tuple[Array, Array]: |
| 310 | """ |
| 311 | Evaluate surface normals. |
| 312 | """ |
| 313 | |
| 314 | ders = self.der(u, v, 1) |
| 315 | |
| 316 | du = ders[:, 1, 0, :].squeeze() |
| 317 | dv = ders[:, 0, 1, :].squeeze() |
| 318 | |
| 319 | rv = np.atleast_2d(np.cross(du, dv)) |
| 320 | rv /= np.linalg.norm(rv, axis=1)[:, np.newaxis] |
| 321 | |
| 322 | return rv, ders[:, 0, 0, :].squeeze() |
| 323 | |
| 324 | def isoline(self, param: float, dir: Literal["u", "v"] = "u") -> Curve: |
| 325 | """ |