当前位置: 首页 > wzjs >正文

招投标网站如何做后台管理员网站

招投标网站,如何做后台管理员网站,网站开发合同样本,wordpress固定链接设置静态链接问题描述 在平面上有9个点p1到p9,其x坐标依次减小。p1和p2的y坐标相同,p4的切向量已知。要求用直线连接p1和p2,其余点用样条曲线连接,最后生成离散点集。 解决方案 步骤分解 直线段生成:连接p1和p2的直线段。坐标转…

问题描述

在平面上有9个点p1到p9,其x坐标依次减小。p1和p2的y坐标相同,p4的切向量已知。要求用直线连接p1和p2,其余点用样条曲线连接,最后生成离散点集。

解决方案

步骤分解

  1. 直线段生成:连接p1和p2的直线段。
  2. 坐标转换:将p2到p9的点转换到x’坐标系 x ′ = − x x' = -x x=x,使x’递增。
  3. 导数计算
    • p4点的导数根据给定切向量计算。
    • 其他点的导数通过中心差分或单侧差分计算。
  4. 埃尔米特样条生成:对每对相邻点生成埃尔米特曲线段。
  5. 坐标转换回原系:将样条曲线点转换回原坐标系。
  6. 合并结果:将直线段和样条曲线段的点合并。

公式推导

埃尔米特插值公式

埃尔米特插值通过两个点及其导数生成三次多项式。对于点qi和qi+1,其参数方程为:

x ′ ( t ) = x i ′ + t ⋅ ( x i + 1 ′ − x i ′ ) y ′ ( t ) = h 00 ( t ) ⋅ y i + h 10 ( t ) ⋅ m i ⋅ ( x i + 1 ′ − x i ′ ) + h 01 ( t ) ⋅ y i + 1 + h 11 ( t ) ⋅ m i + 1 ⋅ ( x i + 1 ′ − x i ′ ) \begin{aligned} x'(t) &= x'_i + t \cdot (x'_{i+1} - x'_i) \\ y'(t) &= h_{00}(t) \cdot y_i + h_{10}(t) \cdot m_i \cdot (x'_{i+1} - x'_i) \\ &\quad + h_{01}(t) \cdot y_{i+1} + h_{11}(t) \cdot m_{i+1} \cdot (x'_{i+1} - x'_i) \end{aligned} x(t)y(t)=xi+t(xi+1xi)=h00(t)yi+h10(t)mi(xi+1xi)+h01(t)yi+1+h11(t)mi+1(xi+1xi)

其中,基函数为:

h 00 ( t ) = 2 t 3 − 3 t 2 + 1 h 10 ( t ) = t 3 − 2 t 2 + t h 01 ( t ) = − 2 t 3 + 3 t 2 h 11 ( t ) = t 3 − t 2 \begin{aligned} h_{00}(t) &= 2t^3 - 3t^2 + 1 \\ h_{10}(t) &= t^3 - 2t^2 + t \\ h_{01}(t) &= -2t^3 + 3t^2 \\ h_{11}(t) &= t^3 - t^2 \end{aligned} h00(t)h10(t)h01(t)h11(t)=2t33t2+1=t32t2+t=2t3+3t2=t3t2

参数t在 [ 0 , 1 ] [0, 1] [0,1]范围内。

导数计算

对于p4点(在转换后的坐标系中为qk),其导数根据给定切向量计算:

m k = − t y t x m_k = -\frac{ty}{tx} mk=txty

其他点的导数计算如下:

  • 端点:使用单侧差分。
  • 内部点:使用中心差分。

代码实现

#include <QVector>
#include <QPointF>
#include <cmath>QVector<QPointF> generateLinePoints(const QPointF& p1, const QPointF& p2) {QVector<QPointF> points;int steps = 100; // 可调整步数以改变离散密度for (int i = 0; i <= steps; ++i) {qreal t = static_cast<qreal>(i) / steps;qreal x = p1.x() + t * (p2.x() - p1.x());qreal y = p1.y() + t * (p2.y() - p1.y());points.append(QPointF(x, y));}return points;
}QVector<QPointF> generateCurve(const QVector<QPointF>& points, const QPointF& p4Tangent) {QVector<QPointF> result;// 1. 生成p1到p2的直线段if (points.size() < 2) return result;QPointF p1 = points[0];QPointF p2 = points[1];result = generateLinePoints(p1, p2);// 2. 处理p2到p9的样条曲线QVector<QPointF> qPoints;for (int i = 1; i < points.size(); ++i) {qreal x_prime = -points[i].x();qreal y = points[i].y();qPoints.append(QPointF(x_prime, y));}if (qPoints.size() < 2) return result;// 3. 计算导数QVector<qreal> m(qPoints.size(), 0.0);int k = 2; // p4在qPoints中的索引// 处理p4的导数qreal tx = p4Tangent.x();qreal ty = p4Tangent.y();if (tx == 0) {// 垂直切线的处理,这里简化为极大值m[k] = (ty > 0) ? 1e10 : -1e10;} else {qreal dy_dx = ty / tx;m[k] = -dy_dx; // 转换到x'坐标系}// 计算其他点的导数for (int i = 0; i < qPoints.size(); ++i) {if (i == k) continue;if (i == 0) {// 第一个点,前向差分qreal dx = qPoints[i+1].x() - qPoints[i].x();qreal dy = qPoints[i+1].y() - qPoints[i].y();m[i] = dy / dx;} else if (i == qPoints.size() - 1) {// 最后一个点,后向差分qreal dx = qPoints[i].x() - qPoints[i-1].x();qreal dy = qPoints[i].y() - qPoints[i-1].y();m[i] = dy / dx;} else {// 中心差分qreal dx_prev = qPoints[i].x() - qPoints[i-1].x();qreal dy_prev = qPoints[i].y() - qPoints[i-1].y();qreal dx_next = qPoints[i+1].x() - qPoints[i].x();qreal dy_next = qPoints[i+1].y() - qPoints[i].y();m[i] = (dy_prev/dx_prev + dy_next/dx_next) / 2;}}// 4. 生成样条曲线QVector<QPointF> splinePoints;for (int i = 0; i < qPoints.size() - 1; ++i) {QPointF q_start = qPoints[i];QPointF q_end = qPoints[i+1];qreal x_start = q_start.x();qreal y_start = q_start.y();qreal x_end = q_end.x();qreal y_end = q_end.y();qreal m_start = m[i];qreal m_end = m[i+1];int steps = 100; // 每段的采样步数for (int j = 0; j <= steps; ++j) {qreal t = static_cast<qreal>(j) / steps;qreal h00 = 2 * t*t*t - 3 * t*t + 1;qreal h10 = t*t*t - 2 * t*t + t;qreal h01 = -2 * t*t*t + 3 * t*t;qreal h11 = t*t*t - t*t;qreal x_prime = x_start + t * (x_end - x_start);qreal y_prime = h00 * y_start + h10 * m_start * (x_end - x_start) +h01 * y_end + h11 * m_end * (x_end - x_start);// 转换回原坐标系qreal x = -x_prime;qreal y = y_prime;splinePoints.append(QPointF(x, y));}}// 合并结果,去除重复的p2点if (!splinePoints.isEmpty()) {splinePoints.removeFirst();result += splinePoints;}return result;
}

总结

该方案通过将问题分解为直线段生成和样条曲线生成两部分,利用埃尔米特插值在满足p4点切向量条件的同时,生成平滑的曲线。通过坐标转换简化了样条曲线的构造过程,并通过合理的导数计算确保了曲线的连续性和光滑性。


文章转载自:

http://9jI5FUat.mrbmc.cn
http://9D50Qwwl.mrbmc.cn
http://Ry07Bk35.mrbmc.cn
http://kqdGLwyN.mrbmc.cn
http://1n54oinY.mrbmc.cn
http://ChJk7j6e.mrbmc.cn
http://0FapUzmC.mrbmc.cn
http://PKQ9h2wR.mrbmc.cn
http://j1GzEn4M.mrbmc.cn
http://V1OAUam8.mrbmc.cn
http://0Wl5ubNm.mrbmc.cn
http://txpg5OOJ.mrbmc.cn
http://dpCQJwX3.mrbmc.cn
http://eDKH5H6m.mrbmc.cn
http://wv6o1Ww6.mrbmc.cn
http://fIbk1KXV.mrbmc.cn
http://ogdkP8hI.mrbmc.cn
http://pnGw0XWl.mrbmc.cn
http://wgo6fMxg.mrbmc.cn
http://RAAdoMfQ.mrbmc.cn
http://ZCXs9Lnd.mrbmc.cn
http://d1JNEV9k.mrbmc.cn
http://YGNazYEG.mrbmc.cn
http://tBKL7qHD.mrbmc.cn
http://HrJ9frVF.mrbmc.cn
http://NV388Rgr.mrbmc.cn
http://E66SyL4C.mrbmc.cn
http://NpYDGesz.mrbmc.cn
http://Vecv8QOB.mrbmc.cn
http://zPzBEnQk.mrbmc.cn
http://www.dtcms.com/wzjs/745502.html

相关文章:

  • 做网站最主要是那个一类商标wordpress主题放哪里
  • 汉字域名的网站运营一款app的费用
  • 镇江网站制作价格如何计算应用公园app免费制作
  • 简繁英3合1企业网站生成管理系统V1.6织梦网站系统删除
  • 工具类网站做排名网站链接网址怎么做
  • 中国建设银行网站评价python在线编程器
  • 移动电子商务网站建设软件工程的发展前景
  • 推广网站排名wordpress无法建立到wordpress.org的安全连接
  • 做视频网站用什么服务器配置福州执业建设中心网站
  • 网站颜色搭配网站做门户网站经验
  • 云南做网站哪家便宜阿里巴巴网站维护要怎么做
  • 网站开发的软 硬件环境标准咨询聊城做网站
  • ih5做的网站怎么上传深圳网站建设公司怎么做
  • 成都网站创建佛山网站建设企业推荐
  • 网页和网站的概念做网站每个月可以赚多少钱
  • 潍坊优化网站排名网站开发学什么语音
  • 上海行业门户网站建设技术广州学校网站建设
  • 网站建设 建议odoo 网站开发
  • 网站建设 福田廊坊关键词排名
  • 凡科网站官网python 做网站 用哪个框架好
  • 汕尾英文网站建设可以做视频网站的源码
  • php如何给网站做支付接口摄影网站怎么做数据库
  • 有没有专门交人做美食的视频网站手机在线设计
  • 毕节网站建设合肥it培训机构
  • 重庆seo网站建设网站开发流程进度规划
  • 淮南服装网站建设费用怎样添加网站上百度商桥代码
  • 制作应用的网站wordpress文章内图片不显示
  • 诚信网站备案中心网站建设 壹起航
  • 有哪些能做专门接做标书的网站苏州做网站推广的公司
  • 建站最好的公司排名上海网站建设专业公司