首页 > 解决方案 > 在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`

标签: cmathcoordinateslinepoints

解决方案


有几个公式可用于这种类型的线性插值(或外插,当 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;
}

在这里,一个可测试的实现。


推荐阅读