Я в основном не понимаю строку const char.Пытается ли получить первый элемент массива значений?
Цель приведения points
к source
- получить постоянную байтовую (эффективно) версию массива float
, которая
// use points as a byte array
const char *source = (const char *) points;
for (unsigned int i=0; i<vcount; i++)
{
// get a reference to the current position in the source array
const float *p = (const float *) source;
...
// iterate to the next series of points
source+=vstride;
}
Я предполагаю, что vstride
- это значение 12 или более.vstride
используется для пропуска произвольного числа байтов для текущей точки с целью вычисления взвешенного значения.Поскольку на каждую позицию приходится не менее 3 float
баллов, я выбрал не менее 12 (3 раза по 4).Может быть больше, если есть другие данные в массиве вместе с точкой между координатой z и началом следующей точки.
Причина, по которой необходимо использовать указатель source
, заключается в том, чтоАрифметика указателя работает на основе sizeof
указанных данных.Таким образом, (points + 12)
отличается от (source + 12)
, и ясно, что vstride
связан с количеством пропускаемых байтов (что подразумевает, что ссылка points
на самом деле может быть struct
ure, которая используется как float
массив из удобства, что не является чем-то необычным в C / C ++).
В C # вы бы не писали что-то подобное.Вы собираетесь передать массив / набор точек, который будет объектом с координатами точки X, Y и Z float
.Точно так же будет необязательный (может быть null
, как отмечено if (wsource)
) массив / набор весов, который содержит одно значение float
, представляющее вес для текущей координаты.Возможно, имеет смысл объединить их вместе.Точки и веса имеют одинаковое количество элементов, если определено weights
.
Вам не понадобятся переменные vcount
, vstride
или wstride
в C #.Вы можете просмотреть массив / коллекцию Points
и применить вес, если указаны какие-либо веса.
float weight = 1.0f;
for (int i = 0; i < points.Length; ++i)
{
if (weights != null)
{
weight = weights[i].Weight;
}
x += points[i].X * weight;
y += points[i].Y * weight;
z += points[i].Z * weight;
wtotal += weight;
}