小编Igo*_*ejc的帖子

如何用两点和半径大小计算椭圆的中心

在将Internet Explorer的SVG实现基于其自己的VML格式时,我遇到了将SVG椭圆弧转换为VML椭圆弧的问题.

在VML中,弧由下式给出:椭圆上的两个点和半径的长度的两个角度.在SVG中,弧由下式给出:椭圆上的两个点的两对坐标和椭圆边界框的大小

因此,问题是:如何将椭圆上的两个点的角度表示为两对坐标.一个中间问题可能是:如何通过曲线上一对点的坐标找到椭圆的中心.

更新:让我们有一个前提条件,即通常放置椭圆(其半径与线性坐标系轴平行),因此不应用旋转.

更新:此问题与svg:ellipse元素无关,而与svg:path元素中的"a"椭圆弧命令无关(SVG路径:椭圆弧曲线命令)

math geometry svg vml ellipse

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

C#:寻求PNG压缩算法/库

我需要压缩或至少降低用户上传到我网站的某些png图像的质量.我已经调整了它的大小,但这对图像大小没有太大作用.

寻求.net 4.0或更低版本的png /图像压缩或质量损失算法或库.


这就是我目前保存/转换图像的方式:

Image mainImg = ImageHelper.ResizeImage(bmp, 600, 500, false);
mainImg.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)

.net c# algorithm png

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

RESTful服务和更新操作

我知道REST应该是面向资源的,它大致转换为使用标准HTTP方法对这些资源的CRUD操作.但是我只是想更新一部分资源?

例如,假设我有Payment资源,我想将其状态标记为" paid".我不希望通过HTTP POST整个Payment对象(有时我甚至没有所有数据).

这样做的RESTful方式是什么?我已经看到Twitter使用以下方法更新Twitter状态:

http://api.twitter.com/1/statuses/update.xml?status=playing with cURL and the Twitter API
Run Code Online (Sandbox Code Playgroud)

这种方法是否属于REST的"精神"?

更新:PUT - > POST

我在此期间发现的一些链接:

rest

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

ASP.NET MVC和Windsor.Castle:使用依赖于HttpContext的服务

我有几个依赖注入服务,它依赖于HTTP上下文之类的东西.现在我将它们配置为Application_Start处理程序中的Windsor容器的单例,这显然是此类服务的问题.

处理这个问题的最佳方法是什么?我正在考虑将它们设置为瞬态,然后在每次HTTP请求后释放它们.但是将HTTP上下文注入其中的最佳方式/地点是什么?控制器工厂或其他地方?

asp.net-mvc castle-windsor inversion-of-control

12
推荐指数
2
解决办法
4293
查看次数

AutoMapper和*是指定的属性

我有一堆XSD.exe生成的数据协定类,所有可选元素都有一对C#属性

int Amount {get; set;}
bool isAmountSpecified {get; set;}
Run Code Online (Sandbox Code Playgroud)

在映射竞技场的另一边,我有一个可以为空的int

int? Amount {get; set;}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望AutoMapper能够识别这些模式并知道如何在两个方向上映射事物,而不必为每个单独的属性指定映射.这可能吗?

c# xsd xsd.exe automapper

10
推荐指数
1
解决办法
1031
查看次数

Visvalingam-Whyatt折线简化算法澄清

我正在尝试实现折线简化算法.原始文章可以在这里找到:http://archive.is/Tzq2.这似乎在概念简单,但我不明白的样本算法(我认为这是措辞很差)伪提供,希望有人能提供一些见解.从文章中我收集到的基本想法是

  1. 计算每个点的有效面积(由一条线上三个连续点之间的三角形组成),并删除那些面积为0的面积
  2. 从最小区域开始,将点的面积与阈值进行比较,如果该区域低于该阈值,则从折线中删除它.
  3. 移动到两个相邻的点,并在它们发生变化时重新计算它们的区域
  4. 返回2,直到阈值以下的所有点区域都被移除

算法如下(从文章中逐字复制):

  • 计算每个点的有效区域删除零区域的所有点,并将它们存储在该区域的单独列表中
  • 重复
    • 找到效率最小的点,并将其称为当前点.如果计算出的面积小于要消除的最后一个点,则使用后者的区域.(这可确保在不消除先前消除的点的情况下无法消除当前点.)
    • 从原始列表中删除当前点,并将其与其关联区域一起添加到新列表中,以便在运行时过滤该行.
    • 重新计算两个相邻点的有效面积(见图1b).
  • 直到
    • 原始线仅包含2个点,即起点和终点.

我对'REPEAT'下第一步中的'if'条款感到困惑......任何人都可以澄清一下吗?

algorithm simplification polyline

10
推荐指数
2
解决办法
9593
查看次数

c#log4net在某些条件下将条目存储在内存和电子邮件中

我目前使用带有RollingFileAppender的log4net.

在进行每次Log调用时,我想将其存储在内存中.在我的控制台应用程序运行结束时,我想(如果app.config设置为true)只接受警告和致命并在电子邮件中发送所有这些消息.我注意到MemoryAppender但不太确定如何使用它.另请参阅SMTPAppender但不确定它是否是正确的工具,否则我将使用MemoryAppender并以某种方式过滤掉Levels Warn/Fatal的事件,然后使用SmtpClient类发送电子邮件.

怎么做到这一点?

谢谢

更新

我的log4net配置的最后一部分现在看起来像.

<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender" >
    <onlyFixPartialEventData value="true" />
    <threshold value="WARN" />
  </appender>  

  <root>
     <level value="DEBUG" />
    <appender-ref ref="Console" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="MemoryAppender" />    
  </root>
Run Code Online (Sandbox Code Playgroud)

在代码我做:

private static MemoryAppender MemoryAppender
{
     get
     {
                if (memoryAppender == null)
                {
                    Hierarchy h = LogManager.GetRepository() as Hierarchy;
                    memoryAppender = h.Root.GetAppender("MemoryAppender") as MemoryAppender;
                }
                return memoryAppender;
            }
     }
Run Code Online (Sandbox Code Playgroud)

然后当我想要我称之为的事件时:

MemoryAppender.GetEvents();

我已经尝试了MemoryAppender.GetEvents()[0] .RenderedMessage,但这不是正确的输出,如何获取消息字符串,因为它使用正确的模式和时间等写入文件/控制台日志并构建自己StringBuilder的?然后我将它放在我的电子邮件正文中并使用SmtpClient发送它.RenderMessage只是给我提供给Log.Warn()调用的字符串,而不是写入日志的字符串.这是因为没有在MemoryAppender上设置布局模式吗?

谢谢

c# log4net

9
推荐指数
1
解决办法
2995
查看次数

COLLADA文件查看器

更新:由于没有研究足够的SketchUp GUI,看起来是我自己的错.看看我自己的答案.

嗨,

我打算在我的地图软件中实现"导出到COLLADA"功能,但是由于缺少一个好的COLLADA文件查看器而受到阻碍.我尝试了几个应用程序:

  1. Google SketchUp提供了迄今为止我遇到的最佳观看体验,但导入COLLADA文件的速度非常慢.我尝试了这个我找到的样本,但是将它加载到SketchUp需要2-3分钟,而我正在一台体面的机器上运行它.由于开发出口代码涉及大量试验和错误,因此SketchUp对于实验工作来说太慢了.
  2. 我尝试过Blender,但对于没有进行日常3D游戏开发的人来说,用户界面非常陌生.但是我必须赞美它能够几乎立即加载样本文件,这让我觉得SketchUp的人要么在故意减慢免费版本的导入,要么他们需要梳理他们的编程技巧.(更新:事实证明你可以快速加载它,看到我的回答,抱歉.)
  3. 我还尝试了其他一些免费的观众,但他们要么没有正确展示样本,要么他们的观看能力非常有限(例如没有平移或轨道运行).

我会感激任何提示,但我正在寻找第一手经验,而不仅仅是谷歌搜索(我自己也尝试过).我意识到这不是一个典型的编程问题,但我认为在StackExchange上没有更好的地方来问这个问题.

3d collada sketchup

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

如何从命令行设置日志记录级别

我正在使用 argparse 从命令行获取日志记录级别,然后将其作为 logging.basicConfig 的输入传递。但是,我试图实现这一点的方式不起作用。有什么建议吗?

期望行为,来自命令行:

python main.py -log=DEBUG
Run Code Online (Sandbox Code Playgroud)

欲望输出

DEBUG:__main__: Debug is working
Run Code Online (Sandbox Code Playgroud)

代码

import logging
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-log", "--log", nargs='+', help="Provide logging level. Example --log debug'")

log_level = parser.parse_args().log
log_level = 'logging.'+log_level[0]
print(log_level)
logging.basicConfig(level=log_level)
logger = logging.getLogger(__name__) 
logger.debug(' Debug is working')
Run Code Online (Sandbox Code Playgroud)

python logging argparse

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

Python Poetry:如何指定特定于平台的依赖项替代方案?

一些背景: 我正在从事的项目使用python-ldap库。由于我们是一个混合操作系统开发团队(一些使用 Linux,一些使用 macOS 和一些 Windows),我试图让项目在所有环境中构建。不幸的是,python-ldapWindows 没有正式支持,但有由 Christoph Gohlke 维护的非官方轮子。我已经测试了轮文件,它工作正常。

问题:我如何告诉 Poetry 在 Windows 上使用轮子以及python-ldap在 Linux 和 macOS 上使用官方包?

我尝试了多种方法,包括使用多个约束依赖项和标记

python-ldap = [
    { markers = "sys_platform == 'linux'", version = "*" },
    { markers = "sys_platform == 'win32'", path="lib/python_ldap-3.2.0-cp36-cp36m-win_amd64.whl" }
Run Code Online (Sandbox Code Playgroud)

......但是,从判断poetry.lock文件,似乎再标记合并,只是确定是否库应安装在所有

[[package]]
category = "main"
description = "Python modules for implementing LDAP clients"
marker = "sys_platform == \"linux\" or sys_platform == \"win32\""
name = …
Run Code Online (Sandbox Code Playgroud)

python python-ldap python-wheel python-poetry

8
推荐指数
2
解决办法
1672
查看次数