gpt4 book ai didi

c++ - Hermite 曲线中的切线值

转载 作者:行者123 更新时间:2023-11-28 04:41:51 24 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 Hermite 方法绘制曲线。我知道有两个点是起点和终点,而另外两个点在两端给出切线。端点可以直接猜,但切线的值如何确定。当我给出简单的值时,我要么在一条直线上结束,要么在曲线上形成一个环。

我的代码如下:

//Using tangents

#include<iostream>
#include "graphics.h"
//#include"DDALine.h"
using namespace std;

void calcP(float P0x, float P0y, float R0x, float R0y, float P1x, float P1y, float R1x, float R1y, float Px, float Py, float t){
Px = (2 * t * t* t -3*t*t +1)*P0x + ( t*t*t - 2 *t*t +t)*R0x + (-2 * t*t*t + 3*t*t )*P1x +(t*t*t -t*t )*R1x;
Py = (2 * t * t* t -3*t*t +1)*P0y + ( t*t*t - 2 *t*t +t)*R0y + (-2 * t*t*t + 3*t*t )*P1y +(t*t*t -t*t )*R1y;
putpixel(Px, Py, WHITE);
}

int main(){
int gd = DETECT, gm;
initgraph(&gd, &gm, "C:\\TC\\BGI");

float t = 0;
float P0x = 71, P0y = 165, R0x = -12, R0y = 2, P1x = 210, P1y = 153, R1x = 108, R1y = 0, Px= 0, Py = 0, Pz = 0;
while(t<1){
calcP(P0x, P0y, R0x, R0y, P1x, P1y, R1x, R1y, Px, Py, t);
t+=0.001;
}

getch();
closegraph();
return 0;
}

感谢您的帮助!急需。 :)

最佳答案

如果您只有两个点,则很难以任何有意义的方式定义切线。自然的选择是将它们设置为 0。这只会在点之间画一条线,这当然不是很有趣。

定义切线的简单方法,如果你有更多的点,就是所谓的基数样条。对于点 k 给出切线

Rk = (1-c)(Pk+1 - Pk-1)

c 是一个介于 0 和 1 之间的参数。c=1 给出直线,c=0 给出更弯曲的答案。

如果您想使用当前代码轻松测试它。您可以想象点 -1 和 2,例如,P-1=(10,10) 和 P2=(150,120)。这给出与 (c = 0) 的切线

R0 = (200, 143) 和 R1 = (79, -45)

这应该给线一些曲率。

如果你想要更复杂的切线,你可以尝试Kochanek-Bartels spline (维基百科),它具有三个参数(张力、偏差和连续性)来控制插值。

关于c++ - Hermite 曲线中的切线值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50026650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com