Перенос синтаксиса Rhinoscripts с Python на C#
Я нахожусь в процессе переноса коллекции функций rhinoscript (python) на C# для разработки коллекции пользовательских компонентов кузнечика. Моя проблема в том, что у меня проблемы с доступом к некоторым методам rhinoscript, таким как VectorUnitize(), VectorScale() и PointAdd(). Я не могу найти ссылки, которые включают их в C#. Есть ли у кого-нибудь опыт с такими вещами, чтобы указать мне правильное направление?
Rhinoscript я работаю от:
# FIND THE ALIGNMENT VECTOR
aVec = self.AlignmentVector(neighborAgents, neighborAgentsDistances)
if rs.VectorLength(aVec) > 0:
aVec = rs.VectorUnitize(aVec)
aVec = rs.VectorScale(aVec, self.alignment)
# FIND THE SEPARATION VECTOR
sVec = self.SeparationVector(neighborAgents, neighborAgentsDistances)
if rs.VectorLength(sVec) > 0:
sVec = rs.VectorUnitize(sVec)
sVec = rs.VectorScale(sVec, self.separation)
# FIND THE COHESION VECTOR
cVec = self.CohesionVector(neighborAgents)
if rs.VectorLength(cVec) > 0:
cVec = rs.VectorUnitize(cVec)
cVec = rs.VectorScale(cVec, self.cohesion)
# ADD ALL OF THE VECTOR TOGETHER to find the new position of the agent
acc = [0, 0, 0]
acc = rs.PointAdd(acc, aVec)
acc = rs.PointAdd(acc, sVec)
acc = rs.PointAdd(acc, cVec)
# update the self vector
self.vec = rs.PointAdd(self.vec, acc)
self.vec = rs.VectorUnitize(self.vec)
Что у меня так далеко (не очень:/):
// Find the alignment Vector
Vector3d aVec = AlignmentVector(neighborAgents, neighborAgentsDistances);
if (aVec.Length > 0)
{
aVec.Unitize();
}
aVec = ????
2 ответа
Здесь вы можете увидеть, как все функции скрипта Rhino реализованы с помощью Rhino Common: https://github.com/mcneel/rhinoscriptsyntax/tree/rhino-6.x/Scripts/rhinoscript
Согласно документации Vector3d функции Add, вы также можете использовать перегруженный + оператор Vector3d. Для большинства этих типов геометрии RhinoCommon обеспечивает ожидаемые перегрузки.
Таким образом, чтобы масштабировать вектор, вы умножаете его на скаляр, в вашем случае alignment
, separation
а также cohesion
,
Vector3d vec1 = getyourvector();
vec1.Unitize();
vec1 *= alignment;
Vector3d vec2 = getyourvector();
vec2.Unitize();
vec2 *= cohesion;
Vector3d vec3 = getyourvector();
vec3.Unitize();
vec3 *= separation;
Vector3d acc;
acc += vec1;
acc += vec2;
acc += vec3;