Как пользоваться библиотекой C от D?

Проекция, которую Вы имеете на 2D поверхность, имеет бесконечно много 3D прямоугольников, которые спроектируют к той же 2D форме.

Думают об этом этот путь: у Вас есть четыре 3D точки, которые составляют 3D прямоугольник. Назовите их (x0, y0, z0), (x1, y1, z1), (x2, y2, z2) и (x3, y3, z3). При проектировании этих точек на x-y плоскость Вы отбрасываете координаты z: (x0, y0), (x1, y1), (x2, y2), (x3, y3).

Теперь, Вы хотите спроектировать назад в 3D пространство, необходимо перепроектировать что z0.., z3 были. Но любой набор координат z, которые a) содержание то же x-y расстояние между точками и b) содержание форма прямоугольник будет работать. Так, любой член этого (бесконечного) набора сделает: {(z0+i, z1+i, z2+i, z3+i) | я < - R}.

Редактирование @Jarrett: Предположите, что Вы решили это и закончили с прямоугольником в 3D пространстве. Теперь, предположите двигать тот прямоугольник вверх и вниз по оси z. Те бесконечная сумма переведенных прямоугольников у всех есть та же x-y проекция. Как Вы знаете о нахождении "правильного"?

Редактирование № 2: Хорошо, это из комментария, который я сделал по этому вопросу - более интуитивный подход к обоснованию об этом.

Предполагают содержать листок бумаги выше Вашего стола. Притворитесь, что каждый угол бумаги имеет невесомый лазерный указатель, присоединенный к нему, который указывает вниз на стол. Бумага является 3D объектом, и лазерные точки указателя на столе являются 2D проекцией.

Теперь, как можно сказать, как высоко от стола бумага путем рассмотрения всего лазерные точки указателя?

Вы не можете. Переместите бумагу прямо вверх и вниз. Лазерные указатели будут все еще сиять на тех же пятнах на столе независимо от высоты бумаги.

Нахождение z-координат в обратной проекции похоже на попытку найти высоту бумаги на основе лазерных точек указателя на столе одной.

18
задан ralle 27 October 2009 в 12:52
поделиться

3 ответа

Библиотеки C можно вызывать из D. Что вам нужно сделать, так это преобразовать файлы заголовков C в D. По большей части это довольно просто, и есть жесткая- использовать инструмент командной строки , помогающий автоматизировать процесс. У меня никогда не получалось ничего, кроме игрушечных примеров, но это могло бы быть хорошим началом для того, чтобы увидеть, какие преобразования необходимо произвести. Просто вставьте фрагмент, который вы не можете перевести, в заголовок, и посмотрите, что с ним делает htod.

Самая большая проблема, с которой вы обычно сталкиваетесь, - это творческое использование препроцессора C. Некоторые вещи можно превратить в операторы version () в D, но не все.

Что касается фактической компиляции и связывания с кодом, на unix-подобных платформах, я думаю, вы можете скомпилировать и связать код C с помощью GCC. В Windows вам нужно скомпилировать файлы C с помощью DMC и связать с DMD. Или вы можете скомпилировать код C в DLL с помощью любого компилятора, способного на это, а затем для связи с DMD вам нужно сделать DMD-совместимую импортную библиотеку из DLL. Это можно сделать с помощью инструмента implib, который можно найти в бесплатном Базовом пакете утилит , доступном от DigitalMars.

Многие из этих переводов заголовков уже были выполнены. Полезно сначала просмотреть проект Bindings Dsource или сначала спросить в группах новостей digitalmars D, прежде чем приступать к чему-то серьезному, например, к переводу заголовков GTK. Многие популярные библиотеки, такие как GTK, уже упакованы (например, здесь: GTKD )

Или вы можете скомпилировать код C в DLL с помощью любого компилятора, способного на это, а затем для связи с DMD вам нужно сделать DMD-совместимую импортную библиотеку из DLL. Это можно сделать с помощью инструмента implib, который можно найти в бесплатном Базовом пакете утилит , доступном от DigitalMars.

Многие из этих переводов заголовков уже были выполнены. Полезно сначала просмотреть проект Bindings Dsource или сначала спросить в группах новостей digitalmars D, прежде чем приступать к чему-то серьезному, например, к переводу заголовков GTK. Многие популярные библиотеки, такие как GTK, уже упакованы (например, здесь: GTKD )

Или вы можете скомпилировать код C в DLL с помощью любого компилятора, способного на это, а затем для связи с DMD вам нужно сделать DMD-совместимую импортную библиотеку из DLL. Это можно сделать с помощью инструмента implib, который можно найти в бесплатном Базовом пакете утилит , доступном от DigitalMars.

Многие из этих переводов заголовков уже были выполнены. Полезно сначала просмотреть проект Bindings Dsource или сначала спросить в группах новостей digitalmars D, прежде чем приступать к чему-то серьезному, например, к переводу заголовков GTK. Многие популярные библиотеки, такие как GTK, уже упакованы (например, здесь: GTKD )

Это можно сделать с помощью инструмента implib, который можно найти в бесплатном Базовом пакете утилит , доступном от DigitalMars.

Многие из этих переводов заголовков уже были выполнены. Полезно сначала просмотреть проект Bindings Dsource или сначала спросить в группах новостей digitalmars D, прежде чем приступать к чему-то серьезному, например, к переводу заголовков GTK. Многие популярные библиотеки, такие как GTK, уже упакованы (например, здесь: GTKD )

Это можно сделать с помощью инструмента implib, который можно найти в бесплатном Базовом пакете утилит , доступном от DigitalMars.

Многие из этих переводов заголовков уже были выполнены. Полезно сначала просмотреть проект Bindings Dsource или сначала спросить в группах новостей digitalmars D, прежде чем приступать к чему-то серьезному, например, к переводу заголовков GTK. Многие популярные библиотеки, такие как GTK, уже упакованы (например, здесь: GTKD )

19
ответ дан 30 November 2019 в 08:15
поделиться

Код D может быть связан с объектными файлами C и может взаимодействовать с dll C, но вам необходимо сгенерировать модуль D из файла заголовка C, который вы хотите использовать. На официальном веб-сайте D есть руководство для этого.

4
ответ дан 30 November 2019 в 08:15
поделиться

Взгляните на http://dsource.org Есть много проектов, которые могут помочь вам начать работу с

0
ответ дан 30 November 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: