Я хотел бы рекомендовать начать такую задачу (например, имитировать поведение другой системы очень близко к этому) с подробным уточнением целевой системы. Как это должно работать с различными угловыми случаями. Один из лучших способов сделать это - напишите кучу тестов, чтобы обеспечить правильное поведение. Наличие таких тестов дает:
Можно написать такие тестовые примеры:
sort2_test.py
import unittest
from sort2 import sorted2
class TestSortNumbers(unittest.TestCase):
"""
Verifies numbers are get sorted correctly.
"""
def test_sort_empty(self):
self.assertEqual(sorted2([]), [])
def test_sort_one_element_int(self):
self.assertEqual(sorted2([1]), [1])
def test_sort_one_element_real(self):
self.assertEqual(sorted2([1.0]), [1.0])
def test_ints(self):
self.assertEqual(sorted2([1, 2]), [1, 2])
def test_ints_reverse(self):
self.assertEqual(sorted2([2, 1]), [1, 2])
class TestSortStrings(unittest.TestCase):
"""
Verifies numbers are get sorted correctly.
"""
def test_sort_one_element_str(self):
self.assertEqual(sorted2(["1.0"]), ["1.0"])
class TestSortIntString(unittest.TestCase):
"""
Verifies numbers and strings are get sorted correctly.
"""
def test_string_after_int(self):
self.assertEqual(sorted2([1, "1"]), [1, "1"])
self.assertEqual(sorted2([0, "1"]), [0, "1"])
self.assertEqual(sorted2([-1, "1"]), [-1, "1"])
self.assertEqual(sorted2(["1", 1]), [1, "1"])
self.assertEqual(sorted2(["0", 1]), [1, "0"])
self.assertEqual(sorted2(["-1", 1]), [1, "-1"])
class TestSortIntDict(unittest.TestCase):
"""
Verifies numbers and dict are get sorted correctly.
"""
def test_string_after_int(self):
self.assertEqual(sorted2([1, {1: 2}]), [1, {1: 2}])
self.assertEqual(sorted2([0, {1: 2}]), [0, {1: 2}])
self.assertEqual(sorted2([-1, {1: 2}]), [-1, {1: 2}])
self.assertEqual(sorted2([{1: 2}, 1]), [1, {1: 2}])
self.assertEqual(sorted2([{1: 2}, 1]), [1, {1: 2}])
self.assertEqual(sorted2([{1: 2}, 1]), [1, {1: 2}])
Следующая функция может иметь такую функцию сортировки:
sort2.py
from numbers import Real
from decimal import Decimal
from itertools import tee, filterfalse
def sorted2(iterable):
"""
:param iterable: An iterable (array or alike)
entity which elements should be sorted.
:return: List with sorted elements.
"""
def predicate(x):
return isinstance(x, (Real, Decimal))
t1, t2 = tee(iterable)
numbers = filter(predicate, t1)
non_numbers = filterfalse(predicate, t2)
sorted_numbers = sorted(numbers)
sorted_non_numbers = sorted(non_numbers, key=str)
return sorted_numbers + sorted_non_numbers
Использование довольно простое и задокументировано в тестах:
>>> from sort2 import sorted2
>>> sorted2([1,2,3, "aaa", {3:5}, [1,2,34], {-8:15}])
[1, 2, 3, [1, 2, 34], 'aaa', {-8: 15}, {3: 5}]
Необходимо, вероятно, запустить с некоторых более простых приложений/учебных руководств iPhone, только для получения опоры на obj-c и XCode и т.д.
Для этого, я рекомендую книгу iPhone прагматически настроенного программиста, которая имеет достаточно информации для начала работы (я запустил без знания XCode, obj-c, iPhone или Mac и добрался до рабочего приложения довольно быстро, с помощью главным образом это). Однако я должен добавить, что происхожу из довольно хорошей среды в C/C++ и Java.
Для Вашего конкретного проекта, возможно, смотрите на этот ответ, который обращается к приложению открытого исходного кода 3D, на которое можно посмотреть и получить подсказки от.
Еще раз, если я могу включить свою собственную работу, я имею записанный сообщение о вещах, которые я узнал из разработки приложения ES OpenGL на iPhone. То приложение, Молекулы (упомянутый frankodwyer), является открытым исходным кодом, и я имею рецензия по некоторым из других щекотливых вопросов, с которыми я столкнулся при разработке его. Приложение генерирует 3-D модели и позволяет Вам повернуть и масштабировать их с пальцами, который звучит близко к Вашим потребностям. Можно загрузить код, скомпилировать его и выполнить его на рабочем столе в течение нескольких минут. При присоединении к iPhone Developer Program можно установить его на устройстве.
Когда дело доходит до объектной загрузки, Bill Dudney работает над загрузчик Объекта Волнового фронта для iPhone, который мог бы быть в состоянии взять в Ваших файлах Блендера, должны они быть экспортными в том формате. Я еще не сделал большой работы структуры над iPhone, но это кажется, что его пример имеет ту работу теперь.
В целом, я нахожу, что изучение примером и путем вскакивания в разработку некоторых маленьких, целевых приложений (что Вы никогда не можете выпускать) что работы для меня. Попытайтесь настроить упомянутые выше примеры и посмотрите то, что происходит. Необходимо быть в состоянии прочитать код Objective C в тех примерах и начать получать ощущение того, что они делают.
Даже при том, что книга Hillegass (третий выпуск просто вышел и актуален) внимание на Mac, основные принципы Какао, которые он преподает, все еще важны для iPhone. Шаблон разработки MVC служит Вам точно также на iPhone как Mac. Я на самом деле отклонился от того шаблона в нескольких местах в Молекулах, и я сожалею, что решение, потому что те разделы приложения стали путаницей. Книга является легким чтением и определенно стоящий Вашего времени.
Бесстыдный разъем
я сделал маленькое рендерер AC3D для iPhone. Ссылка>>
Не стесняется испытывать его, демонстрационный lib для средства моделирования iPhone доступен. Обратите внимание на то, что работа OpenGLES на iPhone не является тем же как в Средстве моделирования.
Это использует этап оптимизации и сборку tristrips и создает финал vertexarrays, чтобы быть в состоянии работать на iPhone.
Часы быстрый запуск , как использовать его
У меня есть игра с разработкой iPhone некоторое время забавы и купленного Начинающегося iPhone Development Dave Mark и Jeff LaMarche (ISBN13: 978-1-4302-1626-1), и люблю работать через главы. У меня есть Win32 история Дельфи с небольшим количеством.NET и таким образом, Objective C очень плохо мне знаком.
Одна из глав находится на OpenGL и Кварце, который может представлять интерес для Вас. Я имею далеко еще, не имеют этого, таким образом, я не могу действительно прокомментировать, насколько полезный это будет для себя, но стиль записи очень доступен, и по этому следуют хорошо (для меня так или иначе).
первоначальные главы объясняют точно, как разбудить выполнение с хорошим введением в XCode и InterfaceBuilder.
2 хороших 3-х sdks для iPhone:
sio2interactive и улун.
sio2interactive имеет большое видео и src учебные руководства на их сайте. Это поможет с блендером и образцовым экспортом, и рендеринг - заставляет Вас исправляться к разработке игр. src - все в c для sio2, и код прокомментирован очень хорошо. Это - великолепное место, чтобы начать учиться 3-й и opengles. Блендером к экспорту sio2 является WYSIWYG.
Выполнение всего этого с нуля и необходимо будет знать, как экспортировать и импортировать модели сами. Так оба больших освобождает для кого-то начало работы.