c - 在c程序中找到一条线上的一个点,距该线上的某个点一定距离
问题描述
我给出了一个长度为 d(mod) 的两点 (a[], b[])。我想创建一个能够在 n距离处输出一个点的函数,其中 n 是浮点数(1.5d,0.5d,2d)。我已经能够计算出一条线之间的梯度和距离,但我不知道如何在距离初始坐标 n d 处的一条线上找到一个点。
> #include <stdio.h>
#include <math.h>
float modulus(float vec[])
{
float mod,int i,int n;
n = 2; mod = 0.0;
for (i = 0; i < n; i++)
{
mod = mod + (vec[i] * vec[i]);
}
mod = sqrt(mod);
return mod;
}
void diff(float a[], float b[], float c[])
{
int i;
for (i = 0; i < 2; i++)
c[i] = a[i] - b[i];
}
float gradient(float a[], float b[])
{
int i;
float dx = a[0]-b[0];
float dy = a[1]-b[1];
return (dy/dx);
}
int main()
{
float a[] = {1., 1.};
float b[] = {5., 3.};
float c[2];
float len;
diff(a, b, c);
len = modulus(c);
printf("length = %.2f\n", len);
printf("\n gradient of a line : %.2f\n",gradient(a,b));
return 0;
> `Blockquote`
解决方案
有几个公式可用于这种类型的线性插值(或外插,当 d > 1 或 d < 0 时):
void lerp_2(float a[], float b[],
float d,
float c[])
{
c[0] = a[0] + (b[0] - a[0]) * d;
c[1] = a[1] + (b[1] - a[1]) * d;
}
或者
void lerp_2(float a[], float b[],
float d,
float c[])
{
c[0] = a[0] * (1.0f - d) + b[0] * d;
c[1] = a[1] * (1.0f - d) + b[1] * d;
}
在这里,一个可测试的实现。
推荐阅读
- flutter - 如何在颤动中仅读取音乐的特定文件夹?
- sql - Hive SQL 排名与关系
- swift - 如何将默认蓝色注释用于用户位置而不是我的自定义注释?
- javascript - Node.js - 有没有办法通过索引读取存储中的数组?
- c - 从用户那里获取密码
- database - 如果在 prestashop 1.6 中成功连接后与 DB 通信时出现任何问题,则记录数据库连接
- numpy - 为什么 np.dot 会产生我刚刚从书中复制的属性错误?
- python - 增加matplotlib中图像的显示尺寸
- android - 使用 getDefaultSharedPreferences,遇到 Context 问题
- django - 如何从表 def __str__(self) 打印多个对象:返回 self.title