示例#1
0
Vector Vector_projection(Vector v, Vector w)
{
    float length = Vector_squareLength(w);
    if(length > 0)
    {
        return Vector_multiply(w, Vector_dotProduct(v, w) / length);
    }
    else
    {
        return Vector_multiply(w, 0.0);
    }
}
示例#2
0
文件: vector.c 项目: axiak/speakers
int main(int argc, char ** argv)
{
  Vector * vector_a = Vector_create(1024);

  for (int i = 0; i < vector_a->length; ++i) {
    vector_a->data[i][0] = i;
    vector_a->data[i][1] = i;
  }

  Vector * vector_b = Vector_create(1024);
  Vector * vector_c = Vector_create(1024);

  for (int i = 0; i < vector_b->length; ++i) {
    vector_b->data[i][0] = i + 1;
  }


  struct timeval stop, start;
  gettimeofday(&start, NULL);
  for (int i = 0; i < 100000; ++i) {
    Vector_multiply_real(vector_c, vector_a, vector_b);
  }
  gettimeofday(&stop, NULL);
  printf("took %lu\n", stop.tv_usec - start.tv_usec);

  Vector * vector_d = Vector_create(2);
  Vector * vector_e = Vector_create(2);
  float d_data[] = {1, 1, 2, 2};
  float e_data[] = {3, -1, 1, 1};

  for (int i = 0; i < 4; ++i) {
      vector_d->data[i / 2][i % 2] = d_data[i];
      vector_e->data[i / 2][i % 2] = e_data[i];
  }

  Vector_print(vector_d);
  Vector_print(vector_e);

  Vector_multiply(vector_d, vector_d, vector_e);

  Vector_print(vector_d);


  Vector_destroy(vector_a);
  Vector_destroy(vector_b);
  Vector_destroy(vector_c);
  Vector_destroy(vector_d);
  Vector_destroy(vector_e);

}
示例#3
0
void Drawable_setAnchorPoint(Drawable* self, Vector point)
{
    smug_assert(_invariant(self));
    if (self->mShape != NULL)
    {
        Rectangle rect = Shape_getAsRectangle(self->mShape);
        smug_printf("Moving shape by vector. Before: (%f, %f, %f, %f)", Rectangle_getX(&rect), Rectangle_getY(&rect), Rectangle_getW(&rect), Rectangle_getH(&rect));
        smug_printf("New vector: (%f, %f)", Vector_getX(&point), Vector_getY(&point));
        smug_printf("Old vector: (%f, %f)", Vector_getX(&self->mAnchorPoint), Vector_getY(&self->mAnchorPoint));
        Vector v = Vector_sub(point, self->mAnchorPoint);
        smug_printf("Moving by vector: (%f, %f)", Vector_getX(&v), Vector_getY(&v));
        v = Vector_multiply(v, -1.0);
        smug_printf("Moving by negative vector: (%f, %f)", Vector_getX(&v), Vector_getY(&v));
        Shape_moveByVector(self->mShape, v);
        rect = Shape_getAsRectangle(self->mShape);
        smug_printf("Moved shape by vector. After: (%f, %f, %f, %f)", Rectangle_getX(&rect), Rectangle_getY(&rect), Rectangle_getW(&rect), Rectangle_getH(&rect));
        self->mAnchorPoint = point;
    }
}
示例#4
0
Vector Vector_projectionPlane(Vector v, Vector n)
{
    return Vector_sub(v, Vector_multiply(n, Vector_dotProduct(v, n)));
}