小编Rob*_*Rob的帖子

旋转插值

注意:我会在程度上提出这个问题纯粹是为了简单,弧度,度,不同的零轴承,问题基本相同.

有没有人对旋转插值背后的代码有任何想法?给定线性插值函数:Lerp(from,to,amount),其中amount为0 ... 1,返回from和from之间的值.如何将相同的功能应用于0到360度之间的旋转插补?鉴于度数不应该在0和360之外返回.

给定度数的这个单位圆:

单位圈

从= 45到= 315,算法应该采用到角度的最短路径,即它应该经过零,到360然后到315 - 而不是一直到90,180,270到315.

有没有一个很好的方法来实现这一目标?或者它只是一个可怕的if()块?我错过了一些很好理解的标准方法吗?任何帮助,将不胜感激.

math interpolation rotation

27
推荐指数
3
解决办法
2万
查看次数

加速Reflection Invoke C#/ .NET

有很多关于加速反射调用的帖子,例如:

使用.NET/C中的委托加速Reflection API

https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/

和这里:

示例:使用.NET/C#中的委托加速Reflection API



我的问题是关于加速泛型调用.这有可能吗?

我有一个抽象类和一个实现它的类......

public abstract class EncasulatedMessageHandler<T> where T : Message
{
    public abstract void HandleMessage(T message);
}

public class Handler : EncasulatedMessageHandler<MyMessageType>
{
    public int blat = 0;
    public override void HandleMessage(MyMessageType message) { blat++; }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是建立这些消息处理程序类的列表并快速调用它们的HandleMessage()


目前,我正在做的事情大致如下:

object handler = Activator.CreateInstance(typeof(Handler)); // Ignore this, this is done up front.

MethodInfo method = type.GetMethod("HandleMessage", BindingFlags.Instance | BindingFlags.Public);

Action<object> hook = new Action<object>(delegate(object message)
{
    method.Invoke(handler, new object[] { message });
});

// …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection invoke

15
推荐指数
3
解决办法
1万
查看次数

C#中的立方/曲线平滑插值

下面是一个三次插值函数:

public float Smooth(float start, float end, float amount)
{
    // Clamp to 0-1;
    amount = (amount > 1f) ? 1f : amount;
    amount = (amount < 0f) ? 0f : amount;

    // Cubicly adjust the amount value.
    amount = (amount * amount) * (3f - (2f * amount));

    return (start + ((end - start) * amount));
}
Run Code Online (Sandbox Code Playgroud)

该函数将在起始值和结束值之间进行立方插值,给定量在0.0f - 1.0f之间.如果你要绘制这条曲线,你最终会得到这样的结果:

已过期Imageshack图像已删除

这里的三次函数是:

    amount = (amount * amount) * (3f - (2f * amount));
Run Code Online (Sandbox Code Playgroud)

如何进行调整以产生两个切入的切线?

生成这样的曲线:(线性开始到立方结束)

已过期Imageshack图像已删除

作为一个功能

并像这样另一个:(立方开始线性结束)

已过期Imageshack图像已删除 …

c# math bicubic linear-interpolation

14
推荐指数
1
解决办法
1万
查看次数

在C#中计算两个多边形之间交点的简单方法

我有两个多边形被定义为向量列表,我已经设法编写例程来转换和交叉这两个多边形(见第1帧).使用行交叉我可以弄清楚这些是否发生碰撞,并编写了一个有效的Collide()函数.

这将用于可变步长定时游戏,因此(如下所示)在第1帧中,右多边形不会发生碰撞,在第2帧上,多边形在彼此内部,使用右多边形是完全正常的向左移动了.

我的问题是,找出交叉时刻的最佳方法是什么?在这个例子中,让我们假设在第1帧中右边的多边形在X = 300,第2帧它移动了-100并且现在是200,这就是我在第2帧出现时所知道的,它是在300,现在它是在200.我想知道的是它什么时候实际碰撞,在什么X值,这可能是250左右.

多边形相交

我最好找一个解决这个问题的C#源代码解决方案.也许有更好的方法来接近游戏?

c# algorithm math polygon

6
推荐指数
1
解决办法
3169
查看次数

在C#中调用System.Delegate类对象

我正在尝试构建一个使用System.ComponentModel.ISynchronizeInvoke的对象,该对象具有以下方法:(其中包括)

    public object Invoke(Delegate method, object[] args)
Run Code Online (Sandbox Code Playgroud)

使用给定参数调用方法的最佳方法是什么?我可以用:

    public object Invoke(Delegate method, object[] args)
    {
        return method.DynamicInvoke(args);
    }
Run Code Online (Sandbox Code Playgroud)

但这是后期限制.我的直觉是,这是调用方法的唯一方法..任何想法?

c# delegates invoke late-binding

6
推荐指数
1
解决办法
2312
查看次数

C#中使用的方法关键字是什么?

这可能是一个愚蠢的问题,或者是我的疏忽,但是..如果你在属性定义中输入'method',如下所示:

[method: ]
public class MyClass 
Run Code Online (Sandbox Code Playgroud)

Visual Studio突出显示关键字.据我所知,它似乎没有在属性之外突出显示它,并且在VS中击中F1会将你引导到404.

我从来没有见过这个实际使用过的,我找不到任何关于它的信息.

谁知道它的作用?

c# keyword

5
推荐指数
1
解决办法
122
查看次数

三角列表的路径(.NET/C#)

给定一个表示为2d点数组的路径:

Point[] path = new Point[4]
{
    new Point(0,0),
    new Point(10,0),
    new Point(10,10),
    new Point(0,10),
};
Run Code Online (Sandbox Code Playgroud)

......这里是一个盒子.

将此转换为要在3D应用程序中使用的三角形列表(填充路径)的最佳方法是什么?鉴于这只是一个简单的例子,实际上道路可能相当复杂.框架中是否有任何东西,可能是System.Drawing或在WPF中有哪些可以帮助解决这个问题?

编辑:(在塞缪尔的评论之后)理想情况下,我希望能够处理凸多边形和凹多边形,否则图形必须手动上升许多凸多边形.

.net c# system.drawing

3
推荐指数
1
解决办法
1288
查看次数