在c程序中找到直线上的一点,到该直线上的某个点一定距离

我给出了两个点(a [],b []),其长度为d(mod)。我想创建一个能够在n 距离处输出一个点的函数,其中n是浮点数(1.5d,0.5d,2d)。我已经能够计算出一条线之间的梯度和距离,但是我不知道如何从初始坐标沿着n 距离找到一条线。

> #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`
twtubj 回答:在c程序中找到直线上的一点,到该直线上的某个点一定距离

对于这种类型的线性插值(或外推,当d> 1或d

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 c[])
{
    c[0] = a[0] * (1.0f - d) + b[0] * d;
    c[1] = a[1] * (1.0f - d) + b[1] * d;
}

Here,可测试的实现。

,

您不需要渐变(坡度)。

在您的情况下,您将获得n-新向量与差向量之间的比率,因此计算很简单:

for (i = 0; i < 2; i++)
    result[i] = a[i] + n * c[i];

对于n = 0.5,新点将位于a和b之间的中间

在任意距离下,通常需要计算归一化(单位长度)方向向量

for (i = 0; i < 2; i++)
    u[i] = c[i] / len;

并将其分量乘以所需的距离

for (i = 0; i < 2; i++)
    result[i] = a[i] + u[i] * needed_distance;
本文链接:https://www.f2er.com/2459330.html

大家都在问