qpatchmath.h
来自「算断裂的」· C头文件 代码 · 共 157 行
H
157 行
// ------------------------------------------------------------------// qpatchmath.h//// This file contains the class used for math operations on // bezier patches.// ------------------------------------------------------------------// Author: Stephen A. Vavasis// Copyright (c) 1999 by Cornell University. All rights reserved.// // See the accompanying file 'Copyright' for authorship information,// the terms of the license governing this software, and disclaimers// concerning this software.// ------------------------------------------------------------------// This file is part of the QMG software. // Version 2.0 of QMG, release date September 3, 1999.// ------------------------------------------------------------------#ifndef QPATCHMATH_H#define QPATCHMATH_H#include "qnamesp.h"#include "qpoint.h"// ------------------------------------------------------------------// Abstract base class PatchMath.// Derived class must provide an implementation of control_point_coord_// to specify the patch's control points.class QMG::PatchMath {public: struct IntersectRecord { Point realcoord; Point paramcoord; Real dist; Real param_uncertainty; Real param_uncertainty_seg; bool degen; IntersectRecord() { } ~IntersectRecord() { } }; class Bezier_Helper; friend class Bezier_Helper; class Workspace { private: vector<Real> rwkspa_; vector<std::complex<double> > cwkspa_; int marker_active_; // no copying, no assignment Workspace(const Workspace&) { } void operator=(const Workspace&) { } public: Workspace() : marker_active_(false) { } ~Workspace() { } // All of the following are in qpatchmath.cpp. class ComplexVector; class RealVector; class ComplexMatrix; class RealMatrix; class StartPosMarker; friend class ComplexVector; friend class RealVector; friend class ComplexMatrix; friend class RealMatrix; friend class StartPosMarker; };private: virtual Real control_point_coord_(int cpindex, int d) const = 0; PatchType ptype_; int degree1_; int degree2_; int gdim_; int di_; bool is_forward_;public: PatchMath(PatchType ptype, int degree1, int degree2, int intrinsic_dim, int embedded_dim, bool is_forward) : ptype_(ptype), degree1_(degree1), degree2_(degree2), gdim_(intrinsic_dim), di_(embedded_dim), is_forward_(is_forward) { } virtual ~PatchMath() { } // // Intersect a segment with a patch (or curve in 2D) void intersect_seg(vector<IntersectRecord>& output_stack, Workspace& workspace, const Point& startpoint, const Point& endpoint, double scfac, double tol, bool newton_improve) const; // Intersect a line with a patch (or curve in 2D). void intersect_line(vector<IntersectRecord>& output_stack, Workspace& workspace, const Matrix& lineeq, const Point& linerhs, double scfac, double tol, bool newton_improve) const; // Intersect a plane with a curve. void intersect_plane(vector<IntersectRecord>& output_stack, Workspace& workspace, const Point& plane_normal, Real rhs, double scfac, double tol, bool newton_improve) const; // Get extreme points in a certain direction. void get_extreme_points(vector<IntersectRecord>& output_stack, Workspace& workspace, const Point& direc, double scfac, double tol) const; // Get the real coordinates from parametric coordinates. Point get_real_point(const Point& paramcoord) const; // Get the patch normal. Point normal(const Point& paramcoord) const; // Get the patch directional derivative. Point direc_deriv(const Point& paramcoord, const Point& direc) const; // Get the normal at the barycenter. Point normal_at_barycenter() const; // Get the parametric coordinates of the barycenter. Point barycenter_param() const; // Get the patch number of control points. int num_control_points() const;};#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?